Как выполнить команду или функцию в случае ошибки в Bash Script

1 ott 2022 2 min di lettura
Как выполнить команду или функцию в случае ошибки в Bash Script
Indice dei contenuti

Введение

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

Это может быть полезно для отмены любых частичных изменений, закрытия соединений с базой данных или статуса электронной почты для затронутых людей и т. д. Вы можете использовать команду trap с сигналом ERR как:

trap 'on_error_function' ERR

Когда в сценарии оболочки выдается ошибка, она выполняет функцию с именем ' on_error_function ' сценария оболочки. Вместо вызова функции вы также можете просто выполнить команду.

Пример: как выполнить функцию при ошибке в Bash

Давайте разберемся на примере. Создайте пример сценария оболочки и создайте функцию с любым именем. Затем добавьте команду trap с функцией для сигнала ERR. Затем добавьте простую команду, которая выдает ошибку:

#!/usr/bin/env bash

 on_error(){
 echo "Some error occurred"
 }

 trap 'on_error' ERR

 ls ~/dir_not_exists

Запустите скрипт выше, и вы должны увидеть результаты ниже:

ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
 Some error occurred

Вы можете видеть, что ошибка перехватывается и функция on_error() выполняется bash-скриптом.

Пример: как выполнить команду при ошибке в Bash

Давайте посмотрим на другой пример. Здесь мы будем запускать команду при возникновении ошибки в сценарии оболочки:

#!/usr/bin/env bash

 trap 'echo Ohhh no!' ERR

 ls ~/dir_not_exists

В приведенном выше скрипте мы не определяем никаких отдельных функций. Просто запустите команду echo в случае ошибки. Запустите скрипт выше и посмотрите на результаты:

ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
 Ohhh no!

Пример: Как получить номер строки возникшей ошибки

Вы также можете узнать номер строки, где произошла ошибка в скрипте bash вместе с именем скрипта. Для этого используйте встроенную в bash «звонилку»:

#!/usr/bin/env bash

 on_error(){
 echo "Error found in: $(caller)" >&2
 }

 trap 'on_error' ERR

 ls ~/dir_not_exists

Запустите скрипт выше и посмотрите на результаты. Вы увидите название скрипта и номер строки, где произошла ошибка.

ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
 Error found in: 9./script.sh

Вывод

Спасибо, что прочитали эту статью. Надеемся, что это руководство поможет вам лучше писать сценарии оболочки, обнаружив ошибку и предприняв некоторые действия.

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.