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