Команды Linux

Команда ловушки bash

Команда ловушки bash
Встроенная команда bash, которая используется для выполнения команды, когда оболочка получает какой-либо сигнал, называется «ловушкой». Когда происходит какое-либо событие, bash отправляет уведомление любым сигналом. Многие сигналы доступны в bash. Самый распространенный сигнал bash - SIGINT (прерывание сигнала). Когда пользователь нажимает CTRL + C, чтобы прервать любой процесс с терминала, этот сигнал отправляется для уведомления системы.  В этом руководстве объясняется, как вы можете использовать команду trap для обработки различных типов сигналов.

Синтаксис:

ловушка [-lp] [[аргумент] спецификация_сигнала…]

или же

ловушка [действие] [сигнал]
Ключ Описание
Используется для отображения списка всех имен сигналов с соответствующим номером.
-п Он используется для отображения команды сигнала или команды прерывания для signal_spec.
аргумент Он используется для выполнения команды, когда оболочка получает сигнал (ы).
signal_spec Он содержит название сигнала или номер сигнала.

Команда Trap без каких-либо параметров и аргументов

Выполните следующую команду из терминала, чтобы отобразить список всех команд, связанных с каждым условием. Если какая-либо команда 'trap' не была установлена ​​раньше, следующая команда не будет отображать никакой информации.

$ ловушка

Команда ловушки с параметром -l

Выполните следующую команду с терминала, чтобы отобразить список всех имен сигналов с номером.

$ trap -l

Результат выполнения вышеуказанной команды покажет список из 64 сигналов с номерами.

Установить команду прерывания для ERR и EXIT

Следующая первая команда установит команду 'trap', которая будет выполняться при возникновении любой ошибки оболочки или выходе из оболочки. Эта команда "ловушка" удалит темп.текст файл из текущего местоположения. Команда 'ls' используется для проверки темп.текст файл существует или нет в текущем месте. Наконец выход используется для закрытия терминала и выполнения команды 'trap', установленной перед.

$ trap 'rm temp.txt 'ошибка выхода
$ ls
$ exit

Следующий вывод появится после выполнения вышеуказанных команд.

Теперь, если пользователь снова откроет терминал после выхода и выполнит команду ls, тогда темп.текст файл не будет существовать.

Установите команду 'trap' с номером сигнала SIGUP, SIGQUIT и SIGKILL

Количество сигналов SIGUP, SIGQUIT а также СИГКИЛЛ 1, 3 и 9. Следующая первая команда установит ловушку для этих трех сигналов. При появлении любого из этих сигналов появляется сообщение «Команда ловушки выполнена»Напечатает.  Выполните следующую команду из терминала.

$ trap 'echo Команда Trap выполнена' 1 3 9

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

Установите команду trap для SIGTERM в скрипте

SIGTERM сигнал используется для немедленного завершения процесса путем освобождения его ресурсов. Создайте файл bash с именем 'trapscript.ш'со следующим кодом. В скрипте объявлен бесконечный цикл for, который будет печатать текст непрерывно до тех пор, пока SIGTERM сигнал появляется. Пользователь должен нажать Ctrl + Z чтобы генерировать SIGTERM сигнал.

trapscript.ш

#!/ bin / bash
 
# Установить ловушку для сигналов SIGINT и SIGTERM
trap "echo Программа завершена."SIGTERM SIGINT
 
# Показать сообщение для генерации SIGTERM
echo "Нажмите Ctrl + Z, чтобы остановить процесс"
 
# Инициализировать переменную счетчика, i
я = 1
 
#declare infinite for loop
для(;;)
делать
# Распечатать сообщение со счетчиком i
echo «запуск цикла $ i раз»
# Увеличиваем счетчик на единицу
((i ++))
Выполнено

Запустите сценарий, выполнив следующую команду и нажмите Ctrl + Z, чтобы сгенерировать SIGTERM сигнал. Появится следующий аналогичный результат.

$ bash trapscript.ш

Установите команду 'trap' для запуска функции на основе определенного сигнала

Вы можете связать команду "ловушка" с любой пользовательской функцией. Создайте баш с именем trapfunc.ш и добавьте следующий скрипт. Здесь пользовательская функция с именем func () объявлен для печати простого сообщения, «Задача выполнена». Цикл for-in предназначен для чтения и печати списка всех файлов и папок текущего рабочего каталога. 'ловушка' команда, которая определена в начале списка, вызовет функцию, func () когда программа завершается.

trapfunc.ш

#!/ bin / bash
# Вызов функции func при выходе
функция ловушки выход
# Объявить функцию
function func ()
 
echo «Задача выполнена»

# Прочитать файлы и папки из текущего списка каталогов с помощью цикла for
для я в *
делать
эхо "$ i"
Выполнено

Запускаем скрипт из терминала.

Запускаем скрипт.

$ bash trapfunc.ш

Следующий вывод показывает, что, «Задача выполнена»Текст печатается после печати всех файлов и папок текущего каталога.

Заключение

В этом руководстве показано, как команду trap можно использовать в Linux для выполнения любой автоматизированной задачи на основе сгенерированного сигнала. Это помогает пользователям отслеживать различные типы ошибок и принимать правильные меры, которые могут быть назначены ранее с помощью этой команды. Многие программы или скрипты выделяют определенные ресурсы при работе в системе. Если какая-либо запущенная программа или сценарий завершает работу или завершается ненормально, ресурсы, используемые этой программой, блокируются. Для решения этой проблемы можно использовать команду trap. Задача очистки ресурсов может быть легко выполнена с помощью этой команды. Надеюсь, читатель получит четкое представление об использовании этой команды после прочтения этого руководства.

Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...
Как установить Doom и играть в него в Linux
Введение в Doom Серия Doom возникла в 90-х годах после выхода оригинальной Doom. Это мгновенно стал хитом, и с тех пор серия игр получила множество на...
Vulkan для пользователей Linux
С каждым новым поколением видеокарт мы видим, как разработчики игр расширяют границы графической точности и приближаются на шаг ближе к фотореализму. ...