我有一个使用一些 Heroku 客户端命令的 Bash 脚本,例如 heroku create。这些命令是用 Ruby 和 include calls 编写的至 IO::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)
最佳答案
尝试在控制终端设备 /dev/tty
上重新打开 stdin
。
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; )
关于ruby - 等待调用 Ruby gets 的 Bash 脚本中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6834706/