我使用 bash shell 并使用了大量软链接。我观察到一个很小但令人讨厌的行为,那就是我需要按两次 tab 键才能完成目录软链接的名称。例如
$ mkdir dir1
$ ln -s dir1 link1
使用自动完成功能,输入“cd d”会产生“cd dir1/”,但输入“cd l”会产生“cd link1”,而我真正想要的是它产生“cd link1/”
答案1
我认为你正在寻找阅读行变量mark-directories
,和mark-symlinked-directories
。只需将以下内容添加到您的~/.inputrc
文件中,然后使用重新加载即可CtrlxCtrlr。
set mark-directories on
set mark-symlinked-directories on
为了确保正常CtrlxCtrlr工作,您还应该在 中包含以下内容~/.inputrc
。(请参阅这个问题。
"\C-x\C-r": re-read-init-file
顺便说一句,如果你想列出你的当前设置阅读行变量,请使用以下命令:(另请参阅man bash
以了解更多详细信息。)
bind -v
答案2
此处的 Tab 起着自动完成的作用,它所做的就是搜索相关文件和目录来完成您的命令。
据我所知,在 bash 中你不能告诉它做其他事情,你可以尝试使用其他 shell,也许他们可以。
然而实际上并没有区别。因为这两个命令都会带你进入同一个目录......
更新
根据这里您可以使用它来进入父目录:
以下是改变给定符号链接的目标的方法:
cd -P .
下面是它的工作原理
user@host:~/tmp$ ls @a b user@host:~/tmp$ file a a: symbolic link to `b/c' user@host:~/tmp$ cd a user@host:~/tmp/a$ cd . user@host:~/tmp/a$ cd -P .a user@host:~/tmp/b/c$
您可以将其别名为
cdl='cd -P'
来自 bash 手册:
这-P选项表示使用物理目录结构而不是遵循符号链接