Lendo de tty no shell canalizado

0

Eu tenho um script que é executado assim:

curl link | zsh -

O script precisa ler a partir da entrada de uso:

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

O problema é que o usuário vê a entrada e pode inserir sua resposta, mas a resposta não é armazenada em human_name.

Exemplo:

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

Resultados em:

Your human name ?Pat
tears

Alguma orientação?

    
por Pat 19.02.2017 / 20:37

1 resposta

2

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
    
por 19.02.2017 / 23:18