У меня есть сценарий, который запускается следующим образом:
curl https://example.com/install.sh | zsh -
Сценарий должен читать из ввода:
read "human_name?Your human name ?"
Проблема в том, что пользователь видит ввод и может ввести свой ответ, но ответ не сохраняется в human_name.
Пример:
cat <
Результат в:
Your human name ?Pat
tears
Любые указания?
Вы всегда можете читать с терминала, перенаправив его с / dev / tty
, если программа не является фоновой задачей. Если это фоновое задание, оно будет приостановлено сигналом SIGTTIN, пока не переключится на передний план.
Проблема с вашим скриптом не в чтении с терминала, а в том, что вы делаете с прочитанным. Вы использовали здесь документ с интерполяцией, поэтому $ human_name
интерполируется при построении здесь документа, и в то время он пуст. Вам нужно либо использовать здесь документ без интерполяции, либо заключить в кавычки знаки доллара, чтобы оболочка, которую вы запускаете с zsh -
, увидела и проанализировала их.
cat <<'EOM' | zsh - read "human_name?Your human name ?"</dev/tty if [ -z "$human_name" ] ; then echo "tears" ; else echo "HI" $human_name; fi EOM