黑名单程序从 bash 完成

Blacklist program from bash completion

Fedora 带有 "gstack" 和一堆 "gst-" 程序,当我试图快速输入 git 别名时,它们不断出现在我的 bash 完成中。它们当然与一千个其他程序一起安装在 /usr/bin 下,所以我不能只从我的 PATH 中删除它们的目录。 Linux 中是否有任何方法可以将这些特定程序列入黑名单以防止其出现以完成?

我尝试了 FIGNORE 和 GLOBIGNORE 环境变量,但它们不起作用,看起来它们仅用于在您输入命令后完成文件。

我不知道您是否可以将特定文件列入黑名单,但可以从您的命令历史记录而不是路径来完成。为此,将以下行添加到 ~/.inputrc:

TAB dynamic-complete-history

FIGNORE 仅用于后缀。它假定您出于任何原因想要将整个 class 文件列入黑名单。所以你需要敲掉第一个字母。

例如要从自动完成中删除 gstack

FIGNORE=stack

将删除 gstack,但也会删除任何以 stack 结尾的内容。

2016 年 Bash 为此引入了一个选项。我正在复制 this newer answer by zuazo:

中的文本

这是相当新的,但在 Bash 4.4 中您可以设置 EXECIGNORE 变量:

aa. New variable: EXECIGNORE; a colon-separate list of patterns that will cause matching filenames to be ignored when searching for commands.

来自the official documentation

EXECIGNORE

A colon-separated list of shell patterns (see Pattern Matching) defining the list of filenames to be ignored by command search using PATH. Files whose full pathnames match one of these patterns are not considered executable files for the purposes of completion and command execution via PATH lookup. This does not affect the behavior of the [, test, and [[ commands. Full pathnames in the command hash table are not subject to EXECIGNORE. Use this variable to ignore shared library files that have the executable bit set, but are not executable files. The pattern matching honors the setting of the extglob shell option.

例如:

$ EXECIGNORE=$(which pytest)

或使用Pattern Matching:

$ EXECIGNORE=*/pytest