在 bash 中,假设我有以下命令:
$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg
99% 的情况下,我会选择python
.它非常烦人,它pytest
会弹出并阻止我仅键入pyt[TAB][RETURN]
以调用python
。我可以隐藏pytest
bash 完成吗?
我的限制:
我知道我可以删除
pytest
at 的二进制文件/usr/bin/pytest
以防止 bash 中出现该建议。但如果我没有 root 访问权限怎么办?如果pytest
一个重要的脚本必须存在才能让其他脚本正常工作怎么办?尽管我可以删除
pytest
二进制文件(我以前已经这样做过),但有时当我升级软件时,这个脚本会再次出现。我知道我可以使用 来
alias
保存我最喜欢的应用程序的击键(也许只是p
为了python
)。但我不喜欢这些不标准的缩写。当我远程连接其他机器时,这让我感到困惑。
那么,有什么方法可以隐藏 bash 完成中的某些命令吗?欢迎使用其他 shell(zsh、fish 等)提供答案,因为 bash 最近并没有加快我的工作流程。
答案1
这是相当新的,但在重击 4.4您可以设置EXECIGNORE
变量:
啊。新变量:EXECIGNORE;以冒号分隔的模式列表,在搜索命令时将导致匹配的文件名被忽略。
从官方文档:
执行忽略
以冒号分隔的 shell 模式列表(请参阅模式匹配) 使用 PATH 定义要被命令搜索忽略的文件名列表。出于通过 PATH 查找完成和命令执行的目的,完整路径名与这些模式之一匹配的文件不被视为可执行文件。这不会影响 [、test 和 [[ 命令的行为。命令哈希表中的完整路径名不受 EXECIGNORE 的约束。使用此变量可以忽略设置了可执行位但不是可执行文件的共享库文件。模式匹配遵循 extglob shell 选项的设置。
例如:
$ EXECIGNORE=$(which pytest)
或者使用模式匹配:
$ EXECIGNORE=*/pytest