Perl

在上一個命令在中止之前返回非零值之後,我如何讓我的腳本再執行一個命令?

  • July 20, 2015

我有一個呼叫 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 

說明

Bash 參考手冊說:

-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。

另請參閱:使用非官方 Bash 嚴格模式(除非您喜歡調試)

引用自:https://unix.stackexchange.com/questions/216483