prendendo código de saída shell
-
19-09-2019 - |
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?
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"