使用命令行时,cd
是最常用的 shell 命令之一。我已经习惯了输入cd
,按tab
,然后tab
再次按 来查看要cd
进入的目录。Ubuntu 最近开始包括colord
以 开头的软件包及其工具cd
。现在,如果我按cd
和tab
,我会得到以下信息:
$ 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 内置命令不会被排除(exec
,exit
并且export
在完成时仍然建议),因为它们不是使用 PATH 进行搜索的。