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