O código de saída de um processo que chama outro processo é o do processo chamado.
$($($($($(exit 2)))))
echo $?
2
Aqui existem 5 níveis de chamada.
No seu caso:
r=0
a=$(./2.sh)
r=$?
echo "$a"
echo "$r"
Eu gostaria de fazer:
1.sh
:
#!/usr/bin/env bash
set -eu
r=0
a=$(./2.sh || r=$?)
echo "$a"
echo "$r"
2.sh
:
#!/usr/bin/env bash
echo output
exit 2
Mas o resultado é:
$ ./1.sh
output
0 # I'd like to have '2' here
Como $(...)
executa um shell separado. Então, como faço para capturar os dois, o código de saída e a saída?