我有一个 shell 脚本,它调用 Perl 脚本来执行一些文件处理。 Perl 脚本以零或一值退出。set -e
如果 Perl 脚本以值 1 退出,我在脚本开头有 Unix命令来中止脚本。我只是想知道 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
答案1
只是不要使用set -e
并添加退出到您的if
失败分支。如果您希望脚本的其余部分具有该行为,请set -e
在电子邮件通话后添加。
答案2
使用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
如果管道(可能由单个简单命令组成)返回非零状态,请立即退出。贝壳不退出如果失败的命令是语句中测试的一部分if
。
if 命令的语法是
if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
执行测试命令列表,如果其返回状态为零,则执行后续命令列表。如果存在“else alter-consequents”,并且最后的 if 或 elif 子句中的最终命令具有非零退出状态,则执行替代结果。