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?

È stato utile?

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"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top