我有一个返回以下纯文本的端点:
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;一种来自远程资源的自动脚本。
答案 0 :(得分:3)
当脚本的内容通过管道输入bash
时,stdin连接到管道而不是tty,因此脚本无法读取tty,实际上无法从stdin中取出任何东西就此而言(总是得到EOF),因为stdin已经被bash
耗尽了。通过关闭并重新连接stdin可以在脚本中多次耗尽stdin(例如,请参阅this question),但对于任何生成的脚本内容,您始终可以使用进程替换来释放stdin:
bash <(curl -sSL http://git.io/vlhFL)