Дождитесь ввода в скрипте Bash, вызывающем Ruby - PullRequest
4 голосов
/ 26 июля 2011

У меня есть сценарий Bash, использующий некоторые клиентские команды Heroku, например, heroku create. Эти команды написаны на Ruby и включают вызовы на IO :: gets для сбора имени пользователя и пароля. Но, если они вызываются из скрипта Bash, кажется, что он продвигается до последнего. Например, в случае, когда клиент Heroku собирается запросить адрес электронной почты и пароль, первый пропускается, и пользователь может ввести только свой пароль:

Enter your Heroku credentials.
Email: Password: _

Есть ли способ исправить или присяжный сценарий Bash, чтобы предотвратить это (это не происходит, когда точно такая же команда запускается вручную из командной строки.) Или что-то, что должно быть изменено в Ruby

[ОБНОВЛЕНИЕ - Решение]

Я не смог решить вышеуказанную проблему, но @ ответ geekosaur на другой вопрос поставил меня на правильный путь, чтобы сделать терминал «доступным» для сценария Ruby, работающего внутри Bash. Я изменил все:

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 Ответ

2 голосов
/ 27 июля 2011

Попробуйте снова открыть 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; )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...