У меня есть сценарий оболочки, который вызывает скрипт Perl для обработки некоторых файлов. Скрипты Perl выходят либо с нулевым, либо с одним значением. У меня есть команда set -e
Unix в начале моего скрипта, чтобы прервать скрипт, если скрипт Perl выходит со значением один. Мне просто интересно, есть ли какая-либо команда в Unix, которую я могу использовать, чтобы выполнить одну команду до того, как скрипт будет прерван, если сценарий Perl завершится с одним значением? По сути, я хочу, чтобы сценарий отправил мне электронное письмо о том, успешно ли запущен скрипт Perl. Мой код выглядит следующим образом:
#!/bin/bash set -e function email_success { #Some code for the email } function email_fail { #Some code for the email } usr/bin/perl perlscript.pl if [$? -eq 0]; then email_success else email_fail fi #More commands to be executed if its successful
Просто не используйте set -e
и добавьте выход в ветку if
fail. Если вы хотите, чтобы это поведение остальной части скрипта добавляло set -e
после вызова электронной почты.
Использовать set -e
Ты можешь написать:
#!/bin/bash set -e # function email_success {...} # function email_fail { ... } if /usr/bin/perl perlscript.pl; then email_success else email_fail exit 1 fi #More commands to be executed if its successful
Объяснение :
В справочном руководстве Bash говорится:
-e
Выйти немедленно, если конвейер, который может состоять из одной простой команды, возвращает ненулевой статус. Оболочка не выходит, если неудавшаяся команда является частью теста в выраженииif
.
Условные конструкции (если) :
Синтаксис команды if
if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
Выполняется список тестовых команд, и если его статус возврата равен нулю, выполняется список последовательных команд. Если присутствуют «другие альтернативные последствия», а заключительная команда в финальном условии if или elif имеет ненулевой статус выхода, то выполняются альтернативные действия.
См. Также: Использование режима Неофициальный Bash Strict (если вы не отлаживаете Looove)