You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:45:41