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

问题描述 投票:0回答:1

我有一个脚本,如果命令以非零状态退出并且我想在退出前回显某条日志,则脚本应立即退出:

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中失败,请向我回显正确的消息并退出。我知道()表示子shell,并且在子shell中它回显某些东西,然后在subshel​​l(出口1)中返回false,因此它是“ false || false”,因此在主shell中退出。我的问题是,是否与:

相同?
#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; }

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

bash shell unix exit
1个回答
0
投票

在第二个版本中,exit 1退出原始外壳,而不是子外壳。这就是为什么您不需要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退出外壳。

© www.soinside.com 2019 - 2024. All rights reserved.