使烦人的可执行文件对 bash tab 补全不可见(cd-it8 等)

使烦人的可执行文件对 bash tab 补全不可见(cd-it8 等)

使用命令行时,cd是最常用的 shell 命令之一。我已经习惯了输入cd,按tab,然后tab再次按 来查看要cd进入的目录。Ubuntu 最近开始包括colord以 开头的软件包及其工具cd。现在,如果我按cdtab,我会得到以下信息:

$ cd
cd                 cd-fix-profile     cd-it8             
cd-create-profile  cd-iccdump         

如何确保cd-*在使用命令行时不会显示所有这些可执行文件?我认为它们对于操作系统来说是必需的,因此我不能直接将它们移出或重命名;但是,我不希望它们在 bash 中完成或甚至可见。

请注意,这是在 bash 4.4.20(1) 下,这是 Ubuntu 18.04 附带的。

顺便问一下:这些可执行文件仍然包含在 Ubuntu 20.04 中吗?

答案1

Bash 变量

执行
以冒号分隔的 shell 模式列表(参见模式匹配) 定义使用 PATH 进行命令搜索时要忽略的文件名列表。完整路径名与这些模式之一匹配的文件不会被视为可执行文件,因此无法通过 PATH 查找完成和执行命令。

因此将其添加到~/.bashrc

EXECIGNORE="*/cd-*:"

我没有这些cd-*命令,但这里有另一个例子:

$ EXECIGNORE=
$ ex<TAB>
ex                          exit                        exo-open                    expiry
exec                        exo-csource                 exo-preferred-applications  export
exifautotran                exo-desktop-item-edit       expand                      expr
$ xfc<TAB>
xfce4-terminal          xfce4-terminal.wrapper  xfconf-query
$ EXECIGNORE="*/ex?*:*/xfconf-query:"
$ ex<TAB>
ex      exec    exit    export
$ xfc<TAB>
$ xfce4-terminal

它说明了一个重要观点:Shell 内置命令不会被排除(execexit并且export在完成时仍然建议),因为它们不是使用 PATH 进行搜索的。

相关内容