somefile
contém isto:
aaa
bbb
ccc
Este é o subshell que pode sair antes de concluir todas as iterações. No meu caso particular é, while
mas poderia ser for
ou until
:
cat "somefile" | while read -r line
do
echo "$line"
if [ "$line" = "bbb" ]
then
exit 2
fi
done
exit_code="$?"
if [ "$exit_code" -ne 0 ]
then
exit
fi
echo "I'm here"
O problema é que a última linha I'm here
é impressa. Minha intenção é sair completamente para o terminal. No entanto, não tenho certeza se isso está correto e funcionará com todos os shells. Isso é mesmo POSIX? Alguma menção sobre como isso deve funcionar no POSIX?
Perguntei a vários mecanismos de IA e cada um deles vem com uma resposta diferente:
- Copiloto: diz que o exit_code será sempre 0, pois esse é o código de saída do cat. Poderia ser qualquer outro comando.
- ChatGPT: diz que o exit_code será o número após a saída, como aqui 2, porque se propaga.
- Gêmeos: diz que o exit_code será sempre 0, porque $? obtém o código de saída da última instrução, que é
done
e é sempre 0.
Alguma ajuda aqui? Eu tentei no bash e ele detecta o código de saída, mas não tenho certeza se é alguma configuração específica do bash (como pipefail ou é a maneira como funciona com qualquer shell (por exemplo, no UNIX também).