答案1
我认为外壳是bash
。
假设
set -e
您的某个启动脚本中有一个。然后Tab可能会触发此操作:在 shell 中启用set -e
会导致 bash-completion 终止 shell。
这是什么set -e
:
如果管道 […](可能由单个简单命令 […]、列表 […] 或复合命令 […] 组成)返回非零状态,则立即退出。[…]
在我的 Debian 9 中的 Bash 4.4.12 中,我可以通过调用set -e
然后使用制表符补全(如您的屏幕截图所示)来复制此行为。
检验假设
运行false
。如果它退出 shell,则表示set -e
处于活动状态。如果是这样,我预计set +e
这是一个针对您问题的临时修复。再次登录并检查set +e
问题是否消失。应该如此。
定影
您不想set +e
每次登录时都运行。真正的解决方法是set -e
从启动脚本中删除。要检查的文件:
~/.bashrc
~/.bash_profile
~/.bash_login
~/.profile
/etc/profile
/etc/bash.bashrc
其中一些可能不存在,这是正常的。即使它们都存在,也不会在您的特定情况下使用每个文件。该列表并不详尽;这些脚本可以获取其他脚本,并且--rcfile
Bash 可以选择获取任何文件。
我的观点是:确认这set -e
是罪魁祸首后,您需要在 shell 启动序列中追踪它并将其删除。调查它为什么/如何出现在那里可能会得出有趣的结论,但如果您只是想修复相关问题,则可能不需要进行此类研究。
注意从一开始bash -e
就运行一个处于活动状态的 shell ,因此启动脚本会出现类似的症状。set -e
exec bash -e