起初这有点有趣,就像玩“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”场景。