我正在为github项目构建一个bootstrap,并希望它是一个简单的单行程序。该脚本需要密码输入。
这样可以停止脚本等待输入:
curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh -o setup.sh
bash setup.sh
这不会,只是跳过输入请求:
curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh | bash
setup.sh包含的代码如下:
# code before
read -p "Password:" -s password
# code after
是否可以使用干净的单线眼镜?如果是这样,那怎么可能呢?
解决方法:
使用三个命令而不是管道输出。
curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh -o vhosts.sh && bash vhosts.sh && rm vhosts.sh
答案 0 :(得分:4)
使用管道,read
从标准输入(管道)读取,但shell已经读取了所有标准输入,因此没有任何内容可供read
读取。
答案 1 :(得分:2)
我遇到了与 OP 完全相同的问题,正在寻找答案。这个问题是我在 Google 上的第一个热门问题之一,因为它还没有真正的答案,这是我最终偶然发现的命令,它解决了我在远程脚本中使用 read
的需要。>
bash <(curl -s https://example.com/my-bash-script.sh)