![读取命令在本地有效,但 wget 失败](https://linux22.com/image/173238/%E8%AF%BB%E5%8F%96%E5%91%BD%E4%BB%A4%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%20wget%20%E5%A4%B1%E8%B4%A5.png)
我正在尝试将read
命令与 一起使用wget
,因为我正在使用一个简单的 .sh 脚本:
# echo "Please answer by : -> yes <- or -> no <-"
# read answer
# echo $answer
此代码在本地运行良好,但该read
命令在远程失败wget
,无需等待答案即可完成:
# wget -qO - 'https://testserver/pub/test.sh' | bash -x
# + echo 'Please answer by : -> yes <- or -> no <-'
# Please answer by : -> yes <- or -> no <-
# + read answer
#
感谢您的帮助。
答案1
bash
当您在终端中运行脚本时,bash 会获取您的标准输入(你只有一个)从键盘。
keyboard -> script
当您将脚本输入bash
管道时,该管道将成为标准输入。因此,如果您执行以下操作,则您的问题与 wget 无关:
cat test.sh | bash -x
你会有相同的行为,因为现在输入来自管道,而不是键盘。脚本bash
将继承它标准输入。
pipe -> script
一旦管道中的数据完成,bash 和脚本也完成。
解决这个问题的一种方法是下载,然后运行(你不需要,-O
但我试图让你的线路保持原样)。像这样的东西:
$ wget -qO test.sh 'https://testserver/pub/test.sh' && bash test.sh