Почему Bash не будет ждать чтения при использовании с Curl? - PullRequest
3 голосов
/ 03 июля 2011

Я написал Bash-скрипт для настройки Git .Он использует встроенный read, но когда я делаю:

bash < <(curl -s https://raw.github.com/gist/419201/gitconfig.bash)

Он не ждет, когда я введу данные.Как мне заставить его ждать?

Ответы [ 3 ]

6 голосов
/ 03 июля 2011

Я протестировал его без <, как предлагал jcomeau_ictx, и он заработал.

bash <(curl -s https://raw.github.com/gist/419201/gitconfig.bash | head -n 3)

Примечание: я использовал head -3, чтобы остановить выполнение после чтения.

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

Вы можете попытаться read напрямую с управляющего терминала /dev/tty, чтобы повторно включить пользовательский ввод в случае, если стандартный ввод уже перенаправлен, то есть дескриптор файла 0 не открыт на терминале.

Вы можетедаже используйте параметр -t для команды test для программной обработки такой ситуации (см. help test или man test).

read git_name < /dev/tty       # per-command I/O redirection
#read git_name < /dev/console  # alternative

exec 0</dev/tty               # script-wide I/O redirection
read git_name
1 голос
/ 03 июля 2011

Чтобы использовать stdin, вам нужно извлечь файл, скажем, в / tmp, затем bash /tmp/gitconfig.bash.То, как вы делаете это сейчас, вы перенаправляете стандартный ввод, и Unix не имеет отдельного файлового дескриптора для ввода команд, как это делает VMS.

...