“源脚本”不尊重“#!/ bin / bash -ex”并在命令失败时退出

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

谷歌在bash中搜索“set -e”后我感到困惑。根据我的理解,使用“set -e”时,只要出现错误,bash就会退出。但是如果你在mac下面运行两个简单的脚本,比如source myscript,你仍然可以看到“无法到达这里”......任何想法?

#!/bin/bash -ex 
fun_with_error_code() {
  return 1;
}
fun_with_error_code
echo "can not get here"

另一个

#!/bin/bash -ex
commandNotExit
echo "can not get here"

我的菜鸟错误。 Charles Duffy在下面的回答解决了这个问题。这两个脚本工作正常,这只是因为“源myscript”并不尊重shebang line。

bash shell
1个回答
2
投票

shebang行用于让脚本告诉操作系统运行它的解释器。

当你使用source时,你告诉你当前的shell解释器在内部评估脚本的命令。

因此,操作系统不需要为脚本启动新的解释器。

因此,操作系统从不调用shebang线。

因此,当您的脚本与-ex一起运行时,永远不会调用该行上的source等参数。


解决方案有两个方面:

  • 如果你真的想要产生这种效果,可以使用set -e作为一个单独的行(但是请参阅BashFAQ #105,原因你不应该这样做)。
  • 除非您有明确的理由在现有解释器中运行脚本(并更改该解释器的状态),否则请勿使用source。当你有这样的理由时,运行set -e几乎肯定是你不想做的事情。
© www.soinside.com 2019 - 2024. All rights reserved.