Como posso usar as possibilidades de conclusão de tabulação?

16

Quando eu pressiono a guia em um console, recebo essa saída

  

Exibe todas as 2957 possibilidades? (y ou n)

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

    
por UAdapter 03.01.2012 / 11:54

6 respostas

19

A solução é o bash incorporado em compgen . Para grep 'svn' de todos os comandos disponíveis e aliases 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"
    
por Jjed 03.01.2012 / 12:04
2

Você pode tentar usar compgen .

Por exemplo:

compgen -ac | grep "svn"
    
por Rajesh Pantula 03.01.2012 / 12:16
1

Isso deve ser equivalente:

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

Muito semelhante à resposta da totaam, além disso, limita seu escopo a executáveis (como o Bash faz). Mas o compgen de JJE é outra milha melhor.

    
por Oli 03.01.2012 / 12:21
1

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

Mas, dê uma olhada no Zsh! Aqui: link são ótimos exemplos de como isso pode ajudar a reduzir os resultados da conclusão da guia. Isto inclui também negação, e. se você quiser todos os resultados de conclusão de tabulação sem a palavra "foobar", ou todos os resultados com dígitos pares em primeiro lugar, subdiretório tab-completion e muito mais. A razão pela qual eu mudei para o zsh foi o compartilhamento de histórico entre todos os terminais abertos.

    
por math 03.01.2012 / 13:21
0

Eu não conhecia o compgen e teria sugerido:

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

para o bash.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
    
por user unknown 03.02.2012 / 23:43