Tab 补全关闭 SSH 连接

Sho*_*que 3 linux ssh tab-completion

我正在使用 SSH 连接登录我的 Raspberry Pi。我之前通过 SSH 使用制表符补全,效果非常好。但现在,每当我尝试通过 SSH 使用制表符补全时,都会收到“连接已关闭”消息。

截屏

Kam*_*ski 7

我认为外壳是bash.

\n

假设

\n

set -e您的启动脚本之一中然后Tab可能会触发此操作:在 shell 中启用set -e会导致 bash-completion 终止 shell

\n

这是就是set -e

\n
\n

如果管道 [\xe2\x80\xa6](可能由单个简单命令 [\xe2\x80\xa6]、列表 [\xe2\x80\xa6] 或复合命令 [\xe2\ x80\xa6] 返回非零状态。[\xe2\x80\xa6]

\n
\n

在 Debian 9 的 Bash 4.4.12 中,我可以通过调用来复制此行为set -e然后使用制表符补全来复制此行为,如屏幕截图所示。

\n

检验假设

\n

就跑吧false。如果它退出外壳,则意味着set -e处于活动状态。如果是这样,我希望set +e能够临时解决您的问题。再次登录并检查是否set +e问题是否消失。它应该。

\n

定影

\n

您不想set +e每次登录时都运行。真正的解决方法是删除set -e从启动脚本中删除。要检查的文件:

\n
~/.bashrc\n~/.bash_profile\n~/.bash_login\n~/.profile\n/etc/profile\n/etc/bash.bashrc\n
Run Code Online (Sandbox Code Playgroud)\n

其中一些可能不存在,这是正常的。并非每个文件都适用于您的特定情况,即使它们都存在。该列表并不详尽;这些脚本可以获取其他脚本,并且有--rcfile使用 Bash 来获取任何文件。

\n

我的观点是:确认之后set -e是罪魁祸首之后,您需要在 shell 启动序列中找到它并将其删除。调查它为什么/如何到达那里可能会得出有趣的结论,但如果您只是想解决有问题的问题,这样的研究可能没有必要。

\n

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

\n