Вопрос

Я хотел бы попробовать перехватить сигнал 1, но безуспешно.

#!/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) $ 

Даже если это выход 1, он всегда попадает в ловушку 0, кто-нибудь знает, как это решить?

Спасибо

Это было полезно?

Решение

exit 1 не отправляет SIGHUP.Он завершается с кодом возврата (статус выхода AKA) 1.Чтобы отправить 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

$$ — идентификатор текущего процесса.Так, kill -1 $$ отправляет сигнал 1 (SIGHUP) текущему процессу.Вывод приведенного выше сценария:

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

Как проверить код возврата при выходе

Если цель состоит в том, чтобы проверить код возврата (также известный как статус выхода), а не перехватить специальные сигналы, то все, что нам нужно сделать, это проверить переменную статуса. $? на выходе:

#!/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"

При запуске из командной строки выдается:

$ 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

Обратите внимание, что оператор ловушки может вызывать функцию bash, которая может включать в себя сколь угодно сложные операторы для различной обработки разных кодов возврата.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top