Domanda

Vorrei provare il segnale di intrappolamento 1 ma fallire

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Exit 0 signal detected..."' 0
trap 'echo "Exit 1 signal detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
exit 1

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0

Output--
kithokit@15:02:55 trunk (master) $ ./test.sh 
This is a checkpoint 1
Exit 0 signal detected...
kithokit@15:03:44 trunk (master) $ 
.

Anche se è uscita 1, si intrappola sempre in trappola 0, qualcuno sa come risolvere questo?

Grazie

È stato utile?

Soluzione

exit 1 non invia un sospiro.Esce con il codice di ritorno (stato di uscita AKA) 1. Per inviare un uso di sighup kill:

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Signal 0 detected..."' 0
trap 'echo "SIGHUP detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
kill -1 $$

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0
.

$$ è l'ID del processo corrente.Quindi, kill -1 $$ invia il segnale 1 (Sighp) al processo corrente.L'output dello script sopra è:

This is a checkpoint 1
SIGHUP detected...
This is checkpoint 2
Signal 0 detected...
.

Come controllare il codice di ritorno sull'uscita

Se l'obiettivo è quello di controllare il codice di ritorno (noto anche come stato di uscita) anziché prendere segnali speciali, quindi tutto ciò che dobbiamo fare è controllare la variabile di stato $? sull'uscita:

#!/bin/bash
# capture an interrupt # 0
trap 'echo "EXIT detected with exit status $?"' EXIT

echo "This is checkpoint 1"
# exit shell script with 0 signal
exit "$1"
echo "This is checkpoint 2"
.

Quando viene eseguito sulla riga di comando, questo produce:

$ status_catcher 5
This is checkpoint 1
EXIT detected with exit status 5
$ status_catcher 208
This is checkpoint 1
EXIT detected with exit status 208
.

Nota che l'istruzione trap può chiamare una funzione di bash che potrebbe includere dichiarazioni arbitrariamente complicate per elaborare diversi codici di ritorno in modo diverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top