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.

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"

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


1

Isso deve ser equivalente:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done

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.


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.


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 /.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.