Чтение из 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 

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

  • Использовать все хосты, завершенные zsh для cssh
  • После установки oh-my-zsh: ... /.zshrc:source:34: нет такого файла или каталога ... /.oh-my-zsh/oh-my-zsh.sh
  • ssh / mosh для удаленной интерактивной оболочки и выполнить определенную функцию
  • Есть ли способ перечислить количество файлов при использовании dpkg -L для отображения файлов пакета?
  • Как разбить строку на управляющий символ?
  • Как установить bash для запуска * .exe с моно?
  • Заполнение имени файла 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 - лучшая ОС в мире.