Наши партнеры



Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Этот танец невесты оставит вас без слов! Пересмотрела 10 раз!
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Диалог бабушки и внучки! Такое видео вызывает смех сквозь слезы…
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Танец на выпускном взорвал сеть: смотреть без детей
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Женатым лучше не смотреть: танец роскошной Татьяны (видео)
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Этот танец невесты оставит вас без слов! Пересмотрела 10 раз!


Библиотека сайта rus-linux.net

Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Этот танец невесты оставит вас без слов! Пересмотрела 10 раз!
На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по Bash для начинающих
Назад Глава 12: Перехват сигналов Вперед

Команды Trap

Общие положения

Могут быть ситуации, когда вы не захотите, чтобы пользователи ваших скриптов с помощью ввода на клавиатуре специальной последовательности клавиш несвоевременно выходили из скрипта, например, поскольку нужно освободить входной поток или стереть ненужные данные. Инструкция trap перехватывает эти последовательности и ее можно так запрограммировать, что при обнаружении этих сигналов будет выполнен список команд.

Синтаксис инструкции trap сравнительно простой:

trap [COMMANDS] [SIGNALS]

Команде trap указывается перехватить перечисленные сигналы SIGNALS, которые могут быть именами сигналов с префиксом SIG или без этого префикса, либо номерами сигналов. Если сигнал равен 0 или EXIT, команды COMMANDS выполняются тогда, когда происходит выход в командную оболочку. Если одним из сигналов является сигнал DEBUG, список команд COMMANDS выполняется после выполнения каждой простой команды. Сигнал может быть также определен как ERR, в этом случае команды COMMANDS выполняются каждый раз, когда выход из простой команды происходит с ненулевым кодом возврата. Обратите внимание, что эти команды не будут выполняться, если ненулевой код возврат будет возвращен из части инструкции if или из цикла while или until. Они не будут исполняться даже в случае, когда с помощью логических команд AND (&&) или OR (||) будет возвращен ненулевой код выхода, или когда код возврата команды инвертируется с помощью оператора !.

Если спецификации сигнала были указаны правильно, то код возврата самой команды trap равен нулю. В команде trap есть несколько параметров, которые описаны в документации по Bash.

Вот очень простой пример перехвата Ctrl+C, вводимого пользователя, при котором печатается сообщение. При попытке уничтожить эту программу без указания сигнала KILL, ничего происходить не будет.

#!/bin/bash
# traptest.sh

trap "echo Booh!" SIGINT SIGTERM
echo "pid is $$"

while :                 # This is the same as "while true".
do
        sleep 60        # This script is not really doing anything.
done

Как Bash интерпретирует команду trap

Когда во время ожидания завершения команды Bash принимает сигнал, для которого была установлена команда trap, команда trap не будет выполняться до завершения исполняемой команды. Когда Bash с помощью встроенной команды wait ожидает выполнение асинхронной команды, прием сигнала, для которого была задана команда trap, вызовет немедленный выход из встроенной команды wait с кодом возврата, большим 128, а затем сразу будет выполнена команда trap.


Предыдущий раздел: Оглавление Следующий раздел:
Сигналы   Дополнительные примеры