读取命令在本地有效,但 wget 失败

读取命令在本地有效,但 wget 失败

我正在尝试将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

相关内容