Bash脚本中read命令为何未在输出中显示?
解决bash脚本中read命令失效的问题
你的问题出在fzf的执行方式上:fzf是交互式工具,需要直接与终端交互,但你在echo的命令替换$(...)中执行它时,子shell的标准输入被重定向,导致fzf打乱了终端的输入状态,后续的read命令无法正常读取用户输入。
修复方案
先单独执行fzf并将结果保存到变量,同时强制fzf使用终端作为输入源(</dev/tty),避免影响后续的read命令。修改后的函数如下:
function use_selected(){ clear echo " " # 先获取选中的动漫名称,强制fzf使用终端输入 selected_anime=$(fzf --ansi < /dev/tty | cut -d':' -f1) echo -e "$color2 uwu$color1 Here you can edit your progress of this anime:" echo -e " $color2$selected_anime" echo -e "$color1 What's wrong with this anime??" echo -e "$color2 Edit status$color1 (s)" echo -e "$color1 Edit total seasons$color2 (ts)" echo -e "$color2 Edit current season$color1 (cs)" echo -e "$color1 Edit total eps of current season$color2 (te)" echo -e "$color2 Edit current episode$color1 (ce)" echo -e "$color1 Edit rating$color2 (r)" echo -e "$color2 Edit name$color1 (n)" read -p " > " edit # 此处添加你的if/elif逻辑处理edit变量,示例: # case $edit in # s) echo "修改状态" ;; # ts) echo "修改总季数" ;; # # 其他分支... # esac }
原理说明
- 命令替换
$(...)会创建子shell并捕获其输出,但交互式工具如fzf需要直接访问终端才能正常工作,通过< /dev/tty强制fzf使用终端作为输入源,避免子shell的管道重定向干扰。 - 先将
fzf的结果存入变量再输出,避免在echo中直接执行交互式命令,防止终端输入状态被破坏,确保后续read命令能正常读取用户输入。
内容的提问来源于stack exchange,提问作者Kiefciman
相关产品推荐
相关产品推荐

