Perl
在上一個命令在中止之前返回非零值之後,我如何讓我的腳本再執行一個命令?
我有一個呼叫 Perl 腳本來進行文件處理的 shell 腳本。Perl 腳本以零或一值退出。
set -e
如果 Perl 腳本以值 1 退出,我在腳本開頭有 Unix命令以中止腳本。我只是想知道如果Perl腳本以一個值退出,我是否可以使用Unix中的任何命令在腳本中止之前執行一個命令?本質上,我希望腳本向我發送一封電子郵件,說明 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
失敗分支添加出口。如果您希望腳本的其餘部分具有該行為,請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
說明:
-e
如果可能由單個簡單命令組成的管道返回非零狀態,則立即退出。如果失敗的命令是語句中測試的一部分,則shell不會退出。if
if 命令的語法是
if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
test-commands 列表被執行,如果它的返回狀態為零,則 consequent-commands 列表被執行。如果存在“else alternate-consequents”,並且最終 if 或 elif 子句中的最終命令具有非零退出狀態,則執行 alternate-consequents。