在 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) 的回答解决了这个问题。这两个脚本工作正常,只是因为“source myscript”不尊重shebang行。
shebang 行用于让脚本告诉操作系统用什么解释器来运行它。
当您使用 时source
,您是在告诉当前的 shell 解释器在内部评估脚本的命令。
因此,操作系统不需要为脚本启动一个新的解释器。
因此,操作系统从不调用 shebang 行。
因此,-ex
当您的脚本使用source
.
解决方案有两个:
set -e
如果您确实想要这种效果,请作为单独的一行使用(但请参阅BashFAQ #105了解为什么不应该这样做)。source
除非您有非常明确的理由在现有解释器中运行脚本(并更改该解释器的状态),否则不要使用。而当你不具备这样的原因,运行set -e
几乎肯定是你不想做的事。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句