在 Linux 上,为什么目录制表符补全会在以 ~ 开头的路径中添加 \

在 Linux 上,为什么目录制表符补全会在以 ~ 开头的路径中添加 \

在我的工作科学 Linux 6.2 机器上,我经常开始在如下所示的目录中输入内容,然后使用制表符补全来完成它:

~/mydir

但是当我点击 tab 时,它就变成了

\~/mydirectory/

开头有一个额外的斜杠。为什么会这样?我能避免吗?这很麻烦,因为使用 cd 等无法处理额外的斜杠,我必须从实际的主目录开始,如下所示

/home/username/

在这些电脑上。

编辑

实际上,这个问题并不是出现在每个目录中,只有一个特定的目录,我问的时候没有意识到这一点。我在这个问题的回答中给出了问题的原因。

答案1

Linux 不应用任何制表符补全。但 shell 却应用。

这些框具有错误配置的完成系统,或者它们可能错误应用,例如将 zsh 完成到 bash 或反之亦然。

  1. 尝试启动另一个 shell(bash、zsh)并为该 shell 获取 /etc/profile*
  2. 无需配置文件即可登录。ssh host.com bash --noprofile --norc

这将帮助您找出问题所在。我确信问题出在主机或用户的设置文件(配置文件)中,而不是 shell 的问题。

答案2

我无意中~在主目录中创建了一个名为的目录。这是问题的根本原因。删除它就可以解决问题。

答案3

读这个博客文章关于安装一个名为bash 完成它比默认的制表符完成代码更强大,并且更灵活。

命令完成顺便一提

或者,当您发出以下命令时:

cd

无需参数,您将 cd 到您的主目录,之后您可以直接开始输入:

mydir

当你按下 Tab 键时,自动完成功能会将其变为

mydirectory

相关内容