Como posso percorrer as possibilidades de preenchimento de guias?

18

Quando pressiono tab em um console, recebo essa saída

Indicar todas as 2957 possibilidades? (s ou n)

Existe alguma maneira de usar grepessas 2957 possibilidades? Eu gostaria de procurar todos os comandos com a palavra "svn" neles.

UAdapter
fonte

Respostas:

21

A solução é o bash embutido compgen. Para grep 'svn' de todos os comandos disponíveis e alias de comando acessíveis através de $PATH, digite.

compgen -ac | grep svn

Deseja pesquisar a partir de um determinado prefixo (por exemplo, todos os comandos que começam com ecrypt)? Use expressões regulares. .

compgen -ac | grep "^ecrypt"
Jjed
fonte
resposta excelente, mas e se alguém quiser grep as possibilidades de preenchimento de guias? Quero dizer, nem sempre é acionado pelo nome do comando, mas também por parâmetros de comando, etc.
UncleZeiv
2

Você pode tentar usar compgen.

Por exemplo:

compgen -ac | grep "svn"
Rajesh Pantula
fonte
1

Isso deve ser equivalente:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
totaam
fonte
1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Muito semelhante à resposta do totaam, além disso, limita seu escopo aos executáveis ​​(como o Bash faz). Mas o JJE's compgené outra milha melhor.

Oli
fonte
1

talvez {,.}*svn*ajude aqui, por exemplo ls -l /usr/bin/{,.}*svn*<tab>.

Mas, dê uma olhada no Zsh! Aqui: http://www.jukie.net/bart/blog/zsh-tab-completion estão alguns ótimos exemplos de como isso pode ajudar a reduzir os resultados de conclusão da guia. Isso também inclui negação, por exemplo, se você deseja todos os resultados de conclusão de tabulação sem a palavra "foobar" ou todos os resultados com dígitos pares em primeiro lugar, conclusão de tabulação do subdiretório e muito mais. A razão pela qual mudei para zsh foi o compartilhamento de histórico entre todos os terminais abertos.

matemática
fonte
0

Eu não conhecia a compgen e teria sugerido:

ls -d ${PATH//:/\/*svn* } 2>/dev/null

para festança.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
Usuário desconhecido
fonte