Чтение из tty в трубчатой ​​оболочке

У меня есть сценарий, который запускается следующим образом:

curl https://example.com/install.sh | zsh

Сценарий должен считываться с использования ввода:

read "human_name?Your human name ?"</dev/tty 

Проблема заключается в том, что пользователь видит вход и может ввести свой ответ, но ответ не сохраняется в человеческом имени.

Пример:

 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 

Результаты в:

 Your human name ?Pat tears 

Любые указания?

  • Отображение ~ для $ HOME в приглашении zsh
  • zsh автозавершение некоторых частей каталога
  • Как найти функцию zsh, связанную с виджетами zle?
  • $ {# array} vs $ {# array }
  • Использовать Netrw или Nerdtree в Zsh / Bash для выбора файла BY BROWSING?
  • Написание функций zsh, которые работают
  • mv * (исключение ошибки «can not move»)
  • Как настроить zsh для отображения скрытых файлов и папок?
  • One Solution collect form web for “Чтение из tty в трубчатой ​​оболочке”

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

    Проблема с вашим скриптом не читается с терминала, а то, что вы делаете с тем, что вы прочитали. Вы использовали здесь документ с интерполяцией, поэтому $human_name интерполируется при построении документа здесь, и в то же время он пуст. Вам нужно либо использовать документ здесь без интерполяции, либо указывать знаки доллара, чтобы оболочка, которую вы запускали с помощью zsh - просматривала и анализировала их.

     cat << 'EOM' |  zsh -
     прочитайте «человеческое имя? Ваше человеческое имя?» </ dev / tty   
     если [-z "$ human_name"];  затем эхо «слезы»;  else echo "HI" $ human_name;  фи
     МНВ
    
    Linux и Unix - лучшая ОС в мире.