我有一个使用 Heroku 客户端命令的 Bash 脚本,例如 heroku create。这些命令是用 Ruby 编写的,包括对IO::gets 的调用以收集用户名和密码。但是,如果它们是从 Bash 脚本中调用的,它似乎会前进到最后一个 get。例如,在 Heroku 客户端要询问电子邮件和密码的情况下,第一个被跳过,用户只能输入他们的密码:
Enter your Heroku credentials.
Email: Password: _
Run Code Online (Sandbox Code Playgroud)
有没有办法修复或调整 Bash 脚本以防止这种情况发生(当从命令行手动运行完全相同的命令时不会发生这种情况。)或者必须在 Ruby 中更改某些内容?
[更新 - 解决方案]
我无法解决上述问题,但@geekosaur对另一个问题的回答使我走上了正确的轨道,使终端“可用”在 Bash 中运行的 Ruby 脚本。我改变了一切:
curl -s http://example.com/bash.sh | bash
Run Code Online (Sandbox Code Playgroud)
和
bash < <(curl -s http://example.com/bash.sh)
Run Code Online (Sandbox Code Playgroud)
成为
bash <(curl -s http://example.com/bash.sh)
Run Code Online (Sandbox Code Playgroud)
小智 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; )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |