在符号链接目录中,如何用 Tab 键完成目录?

在符号链接目录中,如何用 Tab 键完成目录?

我有一个符号链接:

/path/to/foo -> /path/to/bar/foo

/path/to/foo我可能想要 cd 到/path/to/bar/foo

$ cd ../ Tab

然后没有自动完成。不过,我仍然可以cd正常输入目录“bar”。

这是为什么?我可以使用什么设置或技巧来实现 tab 补全功能?

答案1

这是 bash-completion(第三方项目,与 bash 本身无关)中的一个错误。在 Ubuntu 中默认/etc/bash_completion使用~/.bashrc,在数千行代码(其中大部分代码您可能永远都不需要)中,有一个cd内置的补全函数不能正确处理符号链接目录。如果您禁用内置的补全功能cd,您的 tab 补全cd应该会更符合您的预期。

complete -r cd

答案2

我认为这是设计使然,也是 Bash 处理当前工作目录的方式。

比较以下输出:

  1. pwd
  2. pwd -P

(后者显示身体的当前工作目录而不是符号链接的目录。密码手册。

你可以通过以下方式让 Bash 始终使用物理工作目录:

set -P

手动的状态:

-P 如果设置,shell 在执行更改当前工作目录的命令(例如 cd)时不会遵循符号链接。而是使用物理目录结构。默认情况下,bash 在执行更改当前目录的命令时会遵循目录的逻辑链。

作为副作用,当你 时cd /path/to/foo,你的pwd将是:/path/to/bar/foo

相关内容