等待在Bash脚本中输入调用Ruby获取

时间:2011-07-26 18:27:18

标签: ruby bash heroku

我使用一些Heroku客户端命令创建了一个Bash脚本,例如heroku create。这些命令用Ruby编写,include callsIO::gets编写,以收集用户的名称和密码。但是,如果从Bash脚本中调用它们,它似乎会进入最后一次获取。例如,在Heroku客户端要求提供电子邮件和密码的情况下,第一个被跳过,用户只能输入他们的密码:

Enter your Heroku credentials.
Email: Password: _

有没有办法修复或陪审Bash脚本以防止这种情况发生(当从命令行手动运行完全相同的命令时,不会发生这种情况。)或者必须在Ruby中更改某些内容?

[更新 - 解决方案]

我无法解决上面的问题,但@geekosaur's answer另一个问题让我走上了正确的轨道,让终端“可用”到Bash中运行的Ruby脚本。我改变了所有:

curl -s http://example.com/bash.sh | bash

bash < <(curl -s http://example.com/bash.sh)

bash <(curl -s http://example.com/bash.sh)

1 个答案:

答案 0 :(得分:2)

尝试在控制终端设备stdin上重新开启/dev/tty

exec 0</dev/tty  # Bash

$stdin.reopen(File.open("/dev/tty", "r"))  # Ruby

# Bash examples
: | ( read var; echo $var; )  
: | ( read var </dev/tty; echo $var; )
: | ( exec 0</dev/tty; read var; echo $var; )