código de saída do comando ** antes ** por último? [duplicado]

1

Estou executando um script dentro de um script, release.sh e caller.sh (caller.sh call releases.sh). Ambos são bash.

release.sh contém várias condições com 'exit 1' para erros.

caller.sh contém uma linha que vai "./release.sh", então verifica o código de saída de release.sh - se $? é maior que 0, em seguida, echo "release.sh aparafusado" e sai.

./release.sh
        if [ $? -gt "0" ] ; then
            echo "release_manager exited with errors, please see the release log."
            exit 1
        else 
            echo "release manager is done." 
        fi

Recentemente, decidi fazer o log release.sh, e assim a linha em caller.sh é:

./release.sh 2>&1 | tee release.txt

Por causa do tubo, $? é o código de saída do 'tee release.txt', que sempre sai como 0, independentemente do comando anterior: - (

Eu tenho que verificar os erros de release.sh e parar o chamador de continuar, mas eu também realmente preciso desse log.

Existe uma maneira de obter o código de saída do comando antes da última vez? Ou uma maneira diferente de registrar o script de lançamento no mesmo comando?

Eu não sou realmente responsável pelo release.sh, prefiro não mudá-lo.

    
por Nahshon paz 02.03.2016 / 11:29

2 respostas

2

Como você está usando o bash, você pode definir no script a opção:

set -o pipefail

The pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully.

Como alternativa, imediatamente após o comando canalizado, é possível ver o valor da variável incorporada ${PIPESTATUS[0]} para o código de saída do primeiro comando no canal.

PIPESTATUS: An array variable containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command).

    
por 02.03.2016 / 11:41
0

Posso sugerir que seja reescrito da seguinte forma:

./release.sh > release.txt 2>&1

e depois

echo $?

retornaria o status de saída correto

    
por 02.03.2016 / 11:49