como detectar se o comando execute falhou no shell?

3

Eu uso o Java para chamar um script de shell na máquina remota.

Eu quero saber se a execução do shell falhou. Mas descobri que, verificar o código de retorno $? após o término do script não funciona. $? indica apenas o código de resultado do último comando no script.

Assim, mesmo um comando executado falha, mas o último comando executa o sucesso. Eu não consigo encontrar. Eu quero saber como resolver o problema?

Preciso verificar o código do resultado para cada comando no shell? E se um comando falhar, saia do script?

    
por NingLee 06.11.2014 / 05:08

2 respostas

4

Você pode usar set -e dentro do script ou passar -e para o intérprete ao iniciar.

#!/bin/sh
set -e

ou

/bin/sh -e /path/to/script.sh

link :

-e

When this option is on, if a simple command fails for any of the reasons listed in Consequences of Shell Errors or returns an exit status value >0, and is not part of the compound list following a while, until, or if keyword, and is not a part of an AND or OR list, and is not a pipeline preceded by the ! reserved word, then the shell shall immediately exit.

    
por 06.11.2014 / 05:21
1

Você também pode usar o trap.

trap 'command' signal

Seu script de shell pode gostar disso:

trap 'trapHandler $LINENO' ERR

para capturar o sinal ERR. trapHandler() pode ser assim.

trapHandler()
{
    retCode=$?
    echo "[LINE:$1] Error:exited with status $retCode"
    exit $retCode
}
    
por 06.11.2014 / 06:14