Pergunta

Eu estou trabalhando em um script shell, e querem lidar com vários códigos de saída que eu poderia encontrar. Para experimentar as coisas, eu estou usando esse script:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;

Acho que eu estou faltando alguma coisa, mas parece que eu não posso prender minha própria "exit 1". Se eu tentar armadilha 0 tudo funciona:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit

Existe algo que eu deveria saber sobre prendendo HUP (1) código de saída?

Foi útil?

Solução

despachos trap em sinais do processo recebe (por exemplo, a partir de um kill), e não em códigos de saída, com a armadilha ... 0 sendo reservados para o processo termina. trap /blah/blah 0 enviará em ambos exit 0 ou exit 1

Outras dicas

Isso é apenas um código de saída, isso não acontece HUP média. Portanto, o seu trap ... 1 está procurando HUP, mas a saída é apenas uma saída.

Além dos sinais do sistema que você pode listar fazendo trap -l, você pode usar alguns Bash sigspecs especial: ERR, SAIR, RETURN e depurar. Em todos os casos, você deve usar o nome do sinal em vez do número para facilitar a leitura.

Você também pode usar || operador, com um || b, b é executado quando uma falha

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top