Esconde alguns comandos do bash completion?

6

No bash, suponha que eu tenha este comando:

$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg

99% do tempo, eu usaria python . É tão chato que pytest aparece e me impede de digitar apenas pyt[TAB][RETURN] para invocar python . Posso esconder pytest da conclusão do bash?

Minhas limitações:

  1. Eu sei que posso remover pytest binário em /usr/bin/pytest para evitar sugestões no bash. Mas e se eu não tiver acesso root? E se pytest for um script de importância que deve existir para permitir que outro script funcione corretamente?

  2. Embora eu possa remover o pytest binário (e já fiz isso antes), em algum momento, quando eu atualizo meu software, esse script volta novamente.

  3. Eu sei que posso usar alias para salvar as combinações de teclas do meu aplicativo favorito (talvez apenas p para python ). Mas eu não gosto dessa abreviação não padronizada. É meio que me confunde quando remoto para outras máquinas.

Então, de qualquer forma, para esconder alguns comandos do bash completion? A resposta em outro shell (zsh, fish, etc) é bem-vinda, já que o bash não acelera meu fluxo de trabalho ultimamente.

    
por neizod 06.10.2016 / 02:32

1 resposta

7

Isso é novo, mas em Bash 4.4 você pode defina a variável EXECIGNORE :

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

Em a documentação oficial :

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.

Por exemplo:

$ EXECIGNORE=$(which pytest)

Ou usando o Correspondência de padrões :

$ EXECIGNORE=*/pytest
    
por 06.10.2016 / 03:28