Como procurar comandos disponíveis no bash

4

Então eu posso inserir systemc e pressionar Tab e obter systemctl .

Mas e se eu quiser listar todos os comandos que terminam em ctl ?

Como eu faria isso?

    
por hgiesel 30.09.2017 / 02:03

4 respostas

9

Para listar todos os comandos disponíveis, incluindo aliases, funções, bash builtins e bash keywords, use compgen -c . Você pode grep da lista resultante com qualquer padrão, por exemplo:

compgen -c | grep 'ctl$'
    
por 30.09.2017 / 02:52
6

Se você usar apropos ctl | less , verá todos os comandos que contêm a string ctl, que inclui as páginas man. Ele também exibirá alguns outros contendo essa string, mas surpreendentemente há alguns desses resultados não intencionais, então você pode achar bastante útil.

    
por 30.09.2017 / 02:21
1

Não há nada que o impeça de pesquisar o $PATH dos arquivos correspondentes

( IFS=:; for p in $PATH; do ls -d "$p"/*ctl; done ) 2>/dev/null

Eu usei um subshell ( ... ) porque estou alterando a variável do shell IFS . Uma alternativa seria salvá-lo no início ( OIFS="$IFS" IFS=: ) e restaurá-lo depois ( IFS="$OIFS" ), mas para mim isso parece um pouco menos robusto.

    
por 30.09.2017 / 02:09
1

Eu faria isso usando find :

( IFS=:; for dir in $PATH; do find $dir/ -type f -executable -iregex ".*ctl"; done )

Para mostrar apenas o cmd:

( IFS=:; for dir in $PATH; do find $dir/ -type f -executable -iregex ".*ctl" -printf '%f\n'; done ) 2>/dev/null
    
por 02.10.2017 / 14:58

Tags