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

wil*_*ell 5 macos bash terminal curl

我正在为github项目构建一个bootstrap,并希望它是一个简单的单行程序.该脚本需要密码输入.

这可以工作并停止脚本等待输入:

curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh -o setup.sh
bash setup.sh
Run Code Online (Sandbox Code Playgroud)

这不,只是跳过输入请求:

curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh | bash
Run Code Online (Sandbox Code Playgroud)

setup.sh包含的代码如下:

# code before
read -p "Password:" -s password
# code after
Run Code Online (Sandbox Code Playgroud)

是否可以有一个干净的单线?如果是这样,那怎么可能呢?

解决方法:

使用三个命令而不是管道输出.

curl -s https://raw.github.com/willfarrell/.vhosts/master/setup.sh -o vhosts.sh && bash vhosts.sh && rm vhosts.sh

Tun*_*izz 9

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

bash <(curl -s https://example.com/my-bash-script.sh)
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 4

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