#!/bin/sh
date;
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
date;
该脚本不存在,应该失败。
答案 0 :(得分:4)
脚本的退出状态(0表示成功,其他一切都失败)是最后一个命令的退出状态。要修复,请在执行其他操作之前将正确的退出状态存储在shell变量中。例如:
#!/bin/sh
date
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
perlexitstatus=$?
date
exit $perlexitstatus
为了完整性,还有另外两种方式:
#!/bin/sh
set -e # exit on non-zero command exitcode
date
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
date
上面通常有点不方便,因为shell脚本通常都有你不关心的命令,并且不希望脚本失败。
#!/bin/sh
set -e # exit on non-zero command exitcode
date
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl ||
{ echo "aaaa... Script failed, spam monkey@company.com"; exit 1;}
date
如果愿意,最后一个也可以用 if-then-fi 语句编写。它提供了一种打印自定义错误消息的方法,以防失败命令的消息不清楚。
答案 1 :(得分:2)
如果你使用shell设置shebang,你可以提供-e
参数来使内部命令失败的脚本中断:
#!/bin/sh -e
date;
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl
date;