如何编写错误中止脚本而不添加`||退出 $?` 到每一行?

如何编写错误中止脚本而不添加`||退出 $?` 到每一行?

我正在编写一个 bash 脚本,该脚本应该退出最后一个失败命令的错误代码,而不是继续执行。这可以通过在各处添加 a 来实现|| exit $?,但是有没有更简单的方法,例如set在开始时选择一个选项来执行此操作而不丑化每一行?

答案1

set -e

set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Set or unset values of shell options and positional parameters.

Change the value of shell attributes and positional parameters, or
display the names and values of shell variables.

 Options:
   -a  Mark variables which are modified or created for export.
   -b  Notify of job termination immediately.
   -e  Exit immediately if a command exits with a non-zero status. 
...

答案2

您可以在块的最后&&使用 和 use连接所有命令。|| exit $?例如:

#!/usr/bin/ksh
ls ~/folder &&
cp -Rp ~/folder ~/new_folder &&
rm ~/folder/file03.txt &&
echo "This will be skipped..." ||
exit $?

如果没有文件,则将跳过~/folder/file03.txt最后一条命令。echo您应该收到如下内容:

$ ./script.ksh
file01.txt  file02.txt
rm: cannot remove /export/home/kkorzeni/folder/file03.txt: No such file or directory
$ echo $?
1

最好的问候,克日什托夫

答案3

您可以定义陷阱函数来捕获脚本中发生的任何错误。

#!/usr/bin/ksh
trap errtrap

function errtrap {
    es=$?
    echo "`date` The script failed with exit status $es " | $log
}

脚本的其余部分如下。

TRAP 将捕获任何命令的任何错误并调用该errtrap函数。为了更好地使用,您可以使该errtrap函数通用并在您创建的任何脚本中调用该函数。

相关内容