Tab 补全关闭 SSH 连接

Tab 补全关闭 SSH 连接

我正在使用 SSH 连接登录我的 Raspberry Pi。我之前使用过 SSH 上的 Tab 补全功能,效果很好。但现在,每当我尝试使用 SSH 上的 Tab 补全功能时,都会收到“连接已关闭”消息。

截屏

答案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

其中一些可能不存在,这是正常的。即使它们都存在,也不会在您的特定情况下使用每个文件。该列表并不详尽;这些脚本可以获取其他脚本,并且--rcfileBash 可以选择获取任何文件。

我的观点是:确认这set -e是罪魁祸首后,您需要在 shell 启动序列中追踪它并将其删除。调查它为什么/如何出现在那里可能会得出有趣的结论,但如果您只是想修复相关问题,则可能不需要进行此类研究。

注意从一开始bash -e就运行一个处于活动状态的 shell ,因此启动脚本会出现类似的症状。set -eexec bash -e

相关内容