Captura do código de saída e saída de um comando

3

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?

    
por x-yuri 04.03.2016 / 12:28

1 resposta

8

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"
    
por 04.03.2016 / 12:36