bash - 在shell脚本中使用set -e和traps

标签 bash shell error-handling

我正在尝试编写一个shell脚本,该脚本本质上在另一个脚本中调用了一堆函数。
该脚本如下所示:

#!/bin/bash
set -e

function cleanup() {
   exitStatus=$?
   if [ $exitStatus -ne 0 ]; then
      rm -rf /tmp/alpha*
   fi
   exit $exitStatus
}

trap cleanup ERR

VAR1="test"

. /home/common/scripts/utils.sh

echo "Executing function1"
function1 $VAR1

echo "Executing function2"
function2 $VAR1

exit $?

我的问题是,我是否需要设置-e以及trap以确保我的脚本在此处很健壮,或者仅使用trap就足够了。

第二:如果我在此脚本中设置了-e,那么是否也需要在utils.sh中设置-e,以确保该函数在该脚本中正确执行,或者该脚本中的-e可以解决该问题?

最佳答案

如果出现错误,set -e只会立即退出脚本,而不是继续。是否使用它取决于您想要的行为。
trap只是处理退出时的错误,因此,如果您担心健壮性,则将两者结合起来可能很好。

如果您还希望它们在出错时立即终止,则应在每个子脚本中放置set -e

关于bash - 在shell脚本中使用set -e和traps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43483706/

相关文章:

bash - 如何在 bash 一行中聚合计数

bash - 在 Bash 中使用变量作为函数参数

linux bash 文件无法理解 $((09))

linux系统,使用 "top"命令,top命令S栏的 'I'是什么意思,S --status

linux - 检查脚本命令中的错误

javascript - 在对象内调用对象方法——错误: cannot read property of undefined

arrays - 检查 bash 中的索引数组是稀疏还是密集

bash - 等到 bash 中的条件变为真

asp.net - 禁用ASP.NET中的 “The client disconnected.”错误?

python-3.x - 如何修复IndentationError : unindent does not match any outer indentation level