失败后立即退出,并在退出外壳之前将错误消息回显到



我有一个脚本,如果命令以非零状态退出,并且我想在退出之前回显 sth 以记录,则应立即退出:

set -e
command A || (echo "A failed";exit 1)
command B || (echo "B failed";exit 1)
if Condition C;
then
command D || (echo "D failed";exit 1)

它做我想做的事。如果命令 A/B/D 失败,请向我回显正确的消息并退出。我知道 (( 表示子壳,在子壳中它回显某些内容然后在子壳(出口 1(中返回 false,所以它是"假 ||假",从而在主外壳中退出。我的问题是,这是否与:

#set -e
command A || { echo "A failed";exit 1; }
command B || { echo "B failed";exit 1; }
if Condition C;
then
command D || {echo "D failed";exit 1; }

如果不是,有什么区别?在我的测试中,它们的行为相同。

在第二个版本中,exit 1退出原始 shell,而不是子 shell。这就是为什么发生这种情况时不需要set -e使脚本退出的原因。

你可以得到第一个外壳的等效值,如下所示:

set -e
command A || { echo "A failed";false; }
command B || { echo "B failed";false; }
if Condition C;
then
command D || {echo "D failed";false; }

false以非零状态退出,这将触发set -e退出外壳。

相关内容

  • 没有找到相关文章

最新更新