O loop while faz parte de um pipeline e, portanto, é executado em um subshell. Variáveis definidas no subshell ( RETVAL=1
) não afetam o shell pai ( echo $RETVAL
).
Por que o código a seguir sempre gera "0"?
#!/bin/bash
RETVAL=0
echo -e '1\n2' | while read number; do
RETVAL=1
done
echo $RETVAL
O loop while faz parte de um pipeline e, portanto, é executado em um subshell. Variáveis definidas no subshell ( RETVAL=1
) não afetam o shell pai ( echo $RETVAL
).
Tem a ver com como o eco não está passando um EOF / Ctrl D para o tempo lido.
Se você puxar o eco para fora e inserir um Ctrl D no loop while, ele funcionará como esperado.
Não sei como enviar um Ctrl D por meio de um eco.
Tags bash