符号链接循环中意外的bash自动完成行为

mbo*_*nin 5 bash symlink autocomplete

我有以下目录结构:

base/
  dir/
    subdir/
    link -> ../dir
Run Code Online (Sandbox Code Playgroud)

现在,如果我CD到目录/链接并键入:

cd ../subd[tab]
Run Code Online (Sandbox Code Playgroud)

我得到:

cd ../subdir[space] 
Run Code Online (Sandbox Code Playgroud)
  1. 我会理解自动完成是否失败(因为它将完成路径并查找base /而不是dir /)。

  2. 我也将了解它是否cd ../subdir/以/结束自动完成(因为它将解释..go up one leveldir /并搜索到dir /)。

但是我不了解两者之间的实际行为。理想情况下,我希望bash表现为2。(自动完成cd ../subdir/)。我正在使用fedora 14,bash版本4.1.7(1)。任何想法如何做到这一点?

mbo*_*nin 0

稍微挖掘一下源代码后,看起来这有点复杂。实际问题是 bash 允许工作目录内的符号链接(请参阅 pwd -L 和 pwd -P)和 readline 之间的混合,如果匹配不在物理目录中,则无法确定匹配的类型

readline/complete.c:1694中

s = (nontrivial_match && rl_completion_mark_symlink_dirs == 0)
? LSTAT (filename, &finfo)
: stat (filename, &finfo);
Run Code Online (Sandbox Code Playgroud)

stat() 失败,因为 ../ 被理解为相对于物理路径而不是逻辑路径。readline 无法确定这是一个目录,因此不会附加最后的“/”。这里描述了一个非常相似的问题

所以我想我现在可以忍受现有的行为......