终端中以非零代码退出的任何命令都会关闭我的终端窗口

终端中以非零代码退出的任何命令都会关闭我的终端窗口

起初这有点有趣,就像玩“Bash Roulette”……但现在它已经过时了,哈哈

终端中以非零代码退出的任何命令都会关闭我的终端窗口

有人告诉我,也许我set -e在终端来源的某个地方设置了一些 bash 脚本。

我已经检查过.bash_profile// .bashrc.profile它看起来并不set -e在那里。

还有其他明显的罪魁祸首吗?

答案1

好吧,确实是我的任性set -e给我带来了麻烦。

我发现的方式set -e是使用bash -lx

最好的办法是使用:

bash -lx > lx.log 2>&1

然后打开该日志文件并搜索set...

一旦你发现这条线很任性,set -e你就可以删除那条线,你的问题就会消失! (不过,重新启动机器可能是个好主意)。

就我而言,它set -e位于 .bash_profile 源文件中,但该行不在 .bash_profile 本身中。

答案2

如果您只是想解决问题,请set +e在您的.bashrc—中包含结尾。

你可以去挖掘——还有很多其他地方可能有set -e——但这样就可以解决问题了。

但是,如果这set -e是您的一部分,$PROMPT_COMMAND那么上述内容将不起作用。尝试printf '%s\n' "$PROMPT_COMMAND"看看里面有什么。

答案3

就我而言,它set -e并不存在于我的任何 bash 初创公司中,并且附加set +e到 my.bashrc并不能修复它。

事实证明,它set -e位于我经常为我的项目运行的 bash 脚本中,并且我正在运行该脚本,. ./my-dev-script.sh以便它尊重我的 bash 别名

我没有意识到的是,.在前面添加额外的内容来运行它也会导致脚本中的 bash 选项延续到我所有的常规终端会话中。

我需要一个新的解决方案来运行 bash 脚本,以尊重我的个人 bash 别名,但至少我找到了 rogue 的来源set -e。只要正常运行它就./my-dev-script.sh可以防止令人沮丧的“Bash Roulette”场景。

相关内容