Para capturar stdout e o código de saída quando o -e
sinalizador (sair do shell imediatamente quando um comando falha) não estiver definido, eu usaria
OUTPUT="$(my_command)"
exit_code=$?
Para capturar o código de saída com -e
set, eu usaria
exit_code=0
my_command || exit_code=$?
Mas combinar as duas abordagens não funciona:
exit_code=0
OUTPUT="$(my_command || exit_code=$?)"
Isso não é definido exit_code
porque é atribuído em um subshell e a cópia no shell pai não é atualizada.
Então, como eu capturo stdout e o código de saída? Eu poderia unset -e
ou, por exemplo, escrever o código de saída em um tempfile, mas eu gostaria de algo mais simples.