谷歌在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。
shebang行用于让脚本告诉操作系统运行它的解释器。
当你使用source
时,你告诉你当前的shell解释器在内部评估脚本的命令。
因此,操作系统不需要为脚本启动新的解释器。
因此,操作系统从不调用shebang线。
因此,当您的脚本与-ex
一起运行时,永远不会调用该行上的source
等参数。
解决方案有两个方面:
set -e
作为一个单独的行(但是请参阅BashFAQ #105,原因你不应该这样做)。source
。当你有这样的理由时,运行set -e
几乎肯定是你不想做的事情。