Bash 补全不适用于符号链接树

Bash 补全不适用于符号链接树

假设我有这样的树结构:

~/user
|_____ dir0
|_____ symlink0
|      |_______ somefile0
|_____ symlink1
       |_______ somefile1
       |_______ somefile2

如果我这样做:

cd
cd symlink0/
cd ../[tab][tab]

我希望它显示 ~/user 的内容:

dir0 symlink0 symlink1

所以我可以做类似的事情:

cd ../symlink1/

但相反,它会直接自动完成......

cd ../dir0/

...只需按一次 [tab] 键。

有什么建议吗?谢谢!

编辑:在另一台计算机上,它根本不会自动完成,即使使用上面示例中的“真实”目录也是如此。在多个目录的情况下,它要么根本不自动完成(不建议可能的目录),要么只是自动完成第一个目录,具体取决于所使用的机器。

请注意,仅当尝试访问树结构中上方的目录时才会发生这种情况(例如,如果 ./path/to 包含两个符号链接,cd ./path/to/sym # press [tab][tab]则将输出symlink0 symlink1以进行选择。)

答案1

原因是对于 shell,符号链接是先验只是一个文件,并且它指向一个事实目录只有通过检查其内容并认识到目标确实是一个目录才能明显看出。您可能已经注意到,当开始键入指向目录的符号链接的名称时,仅当您按TAB 两次

由于在您提出的设置中,有一个实际的目录, 的自动完成cd显然需要一个目录作为参数,它是贪婪的,并接受该目录而不是等待符号链接的解释。

您可以通过遵循以下建议来克服这种行为这个帖子

相关内容