Como canalizar a lista de comandos exibida por "tab complete"?

12

Ao usar comandos no bash, gosto da opção de guia dupla para exibir os comandos disponíveis. Alguns comandos têm mais correspondências possíveis do que outros:

Captura de tela da conclusão de uma guia http://img13.imageshack.us/img13/5541/picturemhy.jpg

Existe uma maneira de canalizar a saída da guia dupla para algum lugar, como grep? Encontrei um post relacionado , mas ainda não tenho certeza de como implementá-lo para canalizá-lo para grep.

cwd
fonte
Como exatamente você imagina que entraria no grepregex? (y or n or g[rep])? Detesto parecer pessimista, mas duvido que isso possa ser feito sem adicioná-lo ao código do bash.
Kevin

Respostas:

21

Para comandos, use compgen -c:

$ compgen -c bas
basename
base64
bashbug
bash
basename
base64
bashbug

Essa saída você pode simplesmente passar grep.

salutis
fonte
+1 Para o comando ... A próxima parte interessante pode ser como criar um atalho de teclado para isso.
#
3

Com base na resposta de @ salutis, criei um script que chamei compe guardei nessas ~/bin/comppesquisas commands', aliasese builtins, (sinalizador de opção, -cabveja a entrada bash man ), com um segundo parâmetro opcional que, se presente, canaliza a saída grepe pesquisa o segundo parâmetro.

Usage: comp string [keyword-for-grep]

Código:

#!/bin/bash

if [ -z "$1" ]; then
    echo usage: comp string [keyword-for-grep]
    echo 
    exit
fi

if [ -z "$2" ]; then
    compgen -cab -- $1
    exit
fi

compgen -cab -- $1 | grep -i $2

Pessoalmente, eu também estaria interessado em descobrir uma maneira de remover o último comando do histórico do shell no script (algo relacionado a history -d) para que, ao pesquisar no bashhistórico, não encontrarei compentradas. Eu sei que também posso fazer isso, HISTIGNOREmas o linux é bastante poderoso, portanto deve haver uma maneira de fazer isso a partir do arquivo de script também - certo?

marca
fonte
1
É claro que você pode ajustar isso para atender às suas necessidades, mas deve começar.
marque
-3

Por que não encontrar o que procura?

Exemplo:

find / -name ec2* -executable -type f -perm -og+rx -print

Conhecendo seu caso de uso, posso criar um exemplo de comando mais detalhado.

Matt
fonte
2
Em outras palavras, você pode reimplementar o que a conclusão do bash faz. Claro, mas isso não é prático, e não é disso que se trata.
Gilles 'SO- stop be evil'