Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
Напоминаем, что обычно сценарии обрабатываются интерпретатором сверху вниз, поэтому вы должны задать, команду
trapДля возврата к стандартной реакции на сигнал, просто задайте команду
-команде''В табл. 2.9 перечислены самые важные, включенные в. стандарт Х/Open сигналы, которые можно отследить (со стандартными номерами в скобках). Дополнительную информацию можно найти на страницах раздела 7 интерактивного справочного руководства, посвященного сигналам (
man 7 signalТаблица 2.9
| Сигнал | Описание |
|---|---|
HUP (1) | Неожиданный останов; обычно посылается, когда отключается терминал или пользователь выходит из системы |
INT (2) | Прерывание; обычно посылается нажатием комбинации клавиш <Ctrl>+<C> |
QUIT (3) | Завершение выполнения; обычно посылается нажатием комбинации клавиш <Ctrl>+<> |
ABRT (6) | Аварийное завершение; обычно посылается при возникновении серьезной ошибки выполнения |
ALRM (14) | Аварийный сигнал; обычно посылается для обработки превышений лимита времени |
TERM (15) | Завершение; обычно посылается системой, когда она завершает работу |
А теперь выполните упражнение 2.15.
В следующем сценарии показана простая обработка сигнала.
#!/bin/shtrap 'rm -f /tmp/my_tmp_file_$$' INTecho creating file /tmp/my_tmp_file_$$date > /tmp/my_tmp_file_$$echo "press interrupt (CTRL-C) to interrupt..."while [ -f /tmp/my_tmp_file_$$ ] ; do echo File exists sleep 1doneecho The file no longer exists trap INTecho creating file /tmp/my_tmp_file_$$date > /tmp/my_tmp_file_$$echo "press interrupt (CTRL-C) to interrupt..."while [ -f /tmp/my_tmp_file_$$ ]; do echo File exists sleep 1doneecho we never get hereexit 0Если вы выполните этот сценарий, нажимая и удерживая нажатой клавишу <Ctrl> и затем нажимая клавишу <C> (или любую другую прерывающую комбинацию клавиш) в каждом из циклов, то получите следующий вывод:
creating file /tmp/my_tmp_file_141press interrupt (CTRL-C) to interrupt ...File existsFile existsFile existsFile existsThe file no longer existscreating file /tmp/my tmp_file_141press interrupt (CTRL-C) to interrupt ...File existsFile existsFile existsFile existsКак это работает
Сценарий использует команду
traprm -f /tmp/my_tmp_file_$$INTwhilerm -f /tmp/my_tmp_file_$$whilewhileДалее сценарий снова применяет команду
trapINTwhileechoexitКоманда
unsetIFSВ следующем сценарии сначала выводится строка
Hello world#!/bin/shfoo="Hello World"echo $foounset fooecho $fooНаписание
foo=unsetfoo=foonullfoounset foofoo