bash完成的黑名单程序

时间:2015-01-30 20:05:59

标签: bash autocomplete

Fedora附带了“gstack”和一堆“gst-”程序,当我试图快速输入我的git别名时,这些程序一直出现在我的bash完成中。它们当然和/ usr / bin一起安装在其他一千个程序中,所以我不能只从我的PATH中删除它们的目录。 Linux中有没有办法将这些特定程序列入黑名单,以便完成?

我已尝试过FIGNORE和GLOBIGNORE环境变量,但它们不起作用,看起来它们只是在您输入命令后才能完成文件。

3 个答案:

答案 0 :(得分:1)

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

TAB dynamic-complete-history

答案 1 :(得分:1)

2016年,Bash为此引入了一个选项。我正在复制this newer answerzuazo中的文本:


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

  

aa。新变量:EXECIGNORE;用冒号分隔的模式列表   搜索命令时将导致匹配的文件名被忽略。

来自the official documentation

  

EXECIGNORE

     

用冒号分隔的外壳模式列表(请参见Pattern Matching),定义了使用以下命令搜索将忽略的文件名列表   路径。完整路径名与这些模式之一匹配的文件不是   出于完成和命令目的考虑的可执行文件   通过PATH查找执行。这不会影响[,   测试和[[命令。命令哈希表中的完整路径名是   不受EXECIGNORE约束。使用此变量忽略共享库   具有可执行位的文件,但不是可执行文件。   模式匹配采用extglob shell选项的设置。

例如:

$ EXECIGNORE=$(which pytest)

或使用Pattern Matching

$ EXECIGNORE=*/pytest

答案 2 :(得分:0)

FIGNORE仅适用于SUFFIXES。无论出于何种原因,它都假定您要将整个类文件列入黑名单。所以你需要敲掉第一个字母。

E.g。要从自动完成中消除gstack

FIGNORE=stack

将摆脱gstack,但也删除以stack结尾的任何其他内容。