从curl管道运行时跳过bash读取

时间:2013-05-31 09:26:04

标签: macos bash curl terminal

我正在为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

2 个答案:

答案 0 :(得分:4)

使用管道,read从标准输入(管道)读取,但shell已经读取了所有标准输入,因此没有任何内容可供read读取。

答案 1 :(得分:2)

我遇到了与 OP 完全相同的问题,正在寻找答案。这个问题是我在 Google 上的第一个热门问题之一,因为它还没有真正的答案,这是我最终偶然发现的命令,它解决了我在远程脚本中使用 read 的需要。

bash <(curl -s https://example.com/my-bash-script.sh)