命令等待stdin时Bash脚本暂停

时间:2015-11-05 02:48:45

标签: bash

我有一个返回以下纯文本的端点:

openssl genrsa -out server.key 2048
openssl req -new -sha256 -key server.key -out server.csr

但在我这样运行之后:

curl -sSf https://.../ | bash -

它询问Country Name (2 letter code) [XX]:,但随后立即运行第二个命令导致错误并返回提示符。如何让它等待用户输入命令1询问的所有字段,然后运行命令2?

我这样做的原因是因为我正在创建一个服务,从curl调用中读取纯文本并将其传递给bash;一种来自远程资源的自动脚本。

1 个答案:

答案 0 :(得分:3)

当脚本的内容通过管道输入bash时,stdin连接到管道而不是tty,因此脚本无法读取tty,实际上无法从stdin中取出任何东西就此而言(总是得到EOF),因为stdin已经被bash耗尽了。通过关闭并重新连接stdin可以在脚本中多次耗尽stdin(例如,请参阅this question),但对于任何生成的脚本内容,您始终可以使用进程替换来释放stdin:

bash <(curl -sSL http://git.io/vlhFL)