Você sempre pode ler o terminal redirecionando de /dev/tty
, desde que o programa não seja um trabalho em segundo plano. Se for um trabalho em segundo plano, ele será pausado por um SIGTTIN até que seja colocado em primeiro plano.
O problema com o seu script não é ler no terminal, mas o que você faz com o que leu. Você usou um documento aqui com interpolação, portanto $human_name
é interpolado durante a construção do documento here e está vazio no momento. Você precisa usar um documento aqui sem interpolação ou citar os sinais de dólar para que o shell executado com zsh -
os veja e os analise.
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