Como canalizar a lista de comandos exibidos por “tab complete”?

11

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

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 ? Eu encontrei uma postagem relacionada , mas eu Ainda não tenho certeza de como implementá-lo para canalizá-lo para grep.

    
por cwd 03.11.2011 / 18:06

3 respostas

20

Para comandos, use compgen -c :

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

Esta saída você pode simplesmente percorrer grep .

    
por 03.11.2011 / 22:21
3

Com base na resposta de @ salutis, criei um script que chamei de comp e armazenado em ~/bin/comp que pesquisa commands ', aliases e builtins , (opção sinalizador -cab consulte a entrada bash man ), com um segundo parâmetro opcional que, se presente, canaliza a saída para grep e procura pelo 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 bash history, não encontre comp entradas. Eu sei que eu também posso fazer isso com HISTIGNORE , mas o linux é muito poderoso, então deve haver uma maneira de fazer isso a partir do arquivo de script também - certo?

    
por 08.11.2011 / 02:51
-3

Por que não encontrar o que você está procurando?

Exemplo:

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

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

    
por 03.11.2011 / 19:46