ruby - 等待调用 Ruby gets 的 Bash 脚本中的输入

标签 ruby bash heroku

我有一个使用一些 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/

相关文章:

ruby - 用于定义方法的 ruby​​ def << 语法

ruby - `?n` 与 `' n'` 有何不同?

bash - 并发 curl POST 请求

ruby - Elasticsearch Postgres表的文本字段

node.js - Meteor 构建在部署到 Heroku 时中断

ios - :submodules => true mean in a CocoaPod Podspec? 是什么

ruby-on-rails - 禁用设备的 :confirmable on-the-fly to batch-generate users

python - 使用 glob 参数递归匹配文件名

Bash - 如何遍历子目录并复制到文件中

heroku - Heroku procfile“Procfile中未定义此类进程类型的网络”错误