gpt4 book ai didi

bash - 出错时停止调用脚本

转载 作者:行者123 更新时间:2023-11-29 09:12:26 25 4
gpt4 key购买 nike

我有 2 个 shell 脚本,分别是脚本 A 和脚本 B。我让他们都“set -e”,告诉他们出错时停止。

但是当脚本A调用脚本B,脚本B出错停止,脚本A并没有停止。

当子脚本死掉时,如何停止母脚本?

最佳答案

它应该像您期望的那样工作。例如:

mother.sh中:

#!/bin/bash
set -ex
./child.sh
echo "you should not see this (a.sh)"

child.sh 中:

#!/bin/bash
set -ex
ls &> /dev/null # good cmd
ls /path/that/does/not/exist &> /dev/null # bad cmd
echo "you should not see this (b.sh)"

调用mother.sh:

[me@home]$ ./mother.sh
++ ./child.sh
+++ ls
+++ ls /path/that/does/not/exist

为什么它对您不起作用?

如果您在 shabang 行 (#!/bin/bash -e) 中指定 -e 并通过将脚本直接发送到 bash,后者会将其视为注释。

例如,如果我们将 mother.sh 更改为:

#!/bin/bash -ex
./child.sh
echo "you should not see this (a.sh)"

请注意它的行为如何根据您对它的调用方式而有所不同:

[me@home]$ ./mother.sh
+ ./child.sh
+ ls
+ ls /path/that/does/not/exist

[me@home]$ bash mother.sh
+ ls
+ ls /path/that/does/not/exist
you should not see this (a.sh)

在脚本中显式调用 set -e 将解决此问题。

关于bash - 出错时停止调用脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7037440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com