Bash:在某个部分中出现错误时失败,然后不管怎样运行另一个部分?

Bash:在某个部分中出现错误时失败,然后不管怎样运行另一个部分?

我想在脚本的一部分内运行一系列命令,并在任何命令返回非零退出状态时停止。但同时,在同一个脚本中,我希望最终命令始终运行,无论之前是否发生任何失败。

#!/usr/bin/env bash
set -e
(
  # various commands go here
) &> /var/log/logfile
final_command_that_always_runs /var/log/logfile

这可能吗?

也许我可以只为脚本的一个 () 部分“set -e”?

答案1

括号调用一个子 shell,因此,您可以在其中设置选项,而它们不会影响父 shell。

提问者编辑:我已将其标记为答案,但我认为它需要一个演示 - 正如答案所说,我需要将 set -e 移动到括号内:

#!/usr/bin/env bash
(
    set -e
    echo 'one'
    ls -la /var/notexist/two
    echo 'three'
) &> /var/tmp/logfile
cp /var/tmp/logfile /var/tmp/logfile2

相关内容