intrappolando shell codice di uscita
-
19-09-2019 - |
Domanda
Sto lavorando su uno script di shell, e voglio gestire vari codici di uscita che potrebbe incontrare. Per provare le cose, sto usando questo script:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;
Credo che mi manca qualcosa, ma a quanto pare non posso intrappolare il mio "exit 1". Se provo a intrappolare 0 tutto funziona:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit
C'è qualcosa che dovrei sapere intrappolando HUP (1) codice di uscita?
Soluzione
spedizioni trap
sui segnali processo riceve (ad esempio, da un kill
), non su codici di uscita, con trappola ... 0 essendo riservati per fine processo. trap /blah/blah 0
invierà su entrambi exit 0
o exit 1
Altri suggerimenti
Questa è solo un codice di uscita, non significa HUP. Così il vostro trap ... 1
è alla ricerca di HUP, ma l'uscita è solo un'uscita.
Oltre ai segnali di sistema che è possibile elencare facendo trap -l
, è possibile utilizzare alcuni speciali sigspecs Bash: ERR, EXIT, RETURN e DEBUG. In tutti i casi, è necessario utilizzare il nome del segnale piuttosto che il numero per una migliore leggibilità.
È inoltre possibile utilizzare || operatore, con una || b, b viene eseguito quando un fallito
#!/bin/sh
failed
{
echo "Failed $*"
exit 1
}
dosomething arg1 || failed "some comments"