bash如何在管道中运行时允许交互式会话

时间:2015-11-30 12:32:18

标签: bash

我正在创建一个我希望人们使用

运行的脚本
 curl -sSL install.domain.com | bash

作为RVM,oh-my-zsh和许多其他人一样,

但是,我遇到了问题,因为我的脚本是交互式的(它使用readselect,并且没有提示用户,脚本只是跳过了正在执行的步骤|

我尝试将{}添加到我的整个代码中。

我正在考虑让脚本再次下载并放入tmp文件夹,并从那里执行,不确定是否可行。

3 个答案:

答案 0 :(得分:1)

您可以明确告诉read使用

从终端读取
read var < /dev/tty

答案 1 :(得分:1)

我找到的解决方案是让用户像以下一样运行它:

bash <( curl -sSL install.domain.com )

这样,脚本作为参数传递,标准输入保持不变。

答案 2 :(得分:1)

这是一个非问题,因为用户不应直接从流中执行代码。用户首先将代码下载到文件中,然后验证他们收到的脚本是否具有与您在网站上提供的哈希相匹配的MD5哈希值。只有在确认他们收到的脚本是您发送的脚本后才能执行它。

$ curl -sSL install.domain.com > installer.sh
$ md5sum installer.bash  # Does the output match the hash posted on install.domain.com?
$ bash installer.bash