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

如何解决cat/curl管道执行bash脚本时read命令不阻塞的问题

问题原因

当通过cat 脚本 | bash、curl 脚本地址 | bash这类管道方式执行脚本时,bash进程的标准输入被绑定到管道输出流而非当前终端(tty)。管道中仅传输脚本本身的代码内容,脚本加载完成后管道就会到达EOF状态,后续read命令尝试从标准输入读取内容时会直接拿到空值,不会触发阻塞等待用户输入的逻辑,因此出现循环空跑现象。

解决方案

有两种修改方式可选,按需使用即可:

  • 方式1:仅调整需要交互的read语句,显式指定从终端设备/dev/tty读取输入,修改internal_install.sh代码:
#!/usr/bin/env bash
set -x
while true; do
    read -p "Hello, what's your name? " name < /dev/tty
    echo $name
done
  • 方式2:调整父脚本调用逻辑,给整个内部脚本重定向输入源为终端,修改install.sh代码:
#!/usr/bin/env bash

./internal_install.sh < /dev/tty

第二种方式更适合内部脚本中存在多处需要用户交互输入的场景,不需要逐一修改每条read语句。

修改后再通过管道方式执行脚本,read命令就可以正常阻塞等待用户输入了。


内容的提问来源于stack exchange,提问作者Tibor Takács

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:05