bash 错误后同时包含可选和非可选命令的陷阱

bash trap with both optional and non-optional commands after error

我很难理解如何正确使用 bash 的 trap 命令。

我有一个我想要的脚本

  1. 做一个
  2. 做B,可能会失败
  3. 不管B成功还是失败,都做C
  4. 如果B失败了,也做D

我想我知道怎么做 1-3。那看起来像;

echo "I am A"

function B {
   echo "I am C"
}
trap B EXIT

echo "I am B"

但是我把D放在哪里呢?如果它进入函数 B,无论 B 是否失败,它都会执行。如果它在外面,它只会在成功时发生。我使用 trap 错了吗?

陷阱可以使用任意代码块而不仅仅是函数名称。

您可以在陷阱中调用函数评估成功或失败并在需要时调用下一个函数。

trap 'B || D' exit

您还可以将整个 B || D 作为 E 的主体,然后在退出时调用 that,如果您更喜欢坚持使用函数名字。 ;)