Bash-completion e grep

4

Eu instalei um programa ( iftop ) no Debian Squeeze, mas alguns dias atrás eu esqueci o nome dele. Eu tinha apenas essa informação sobre o programa:

1) Foi chamado *top

2) Eu consegui encontrá-lo usando bash-completions .

Eu queria grep de todas as opções de bash-completion . Você tem alguma ideia de como posso fazer isso?

    
por Blex 25.03.2013 / 15:04

4 respostas

6

Use o compgen incorporado para obter uma lista de possíveis conclusões:

compgen -c | grep top

Você pode solicitar conclusões para vários tipos de ações de conclusão, como comandos, aliases, funções ..., por exemplo, -c é equivalente a -A commands . Veja man bash para mais detalhes.

    
por 25.03.2013 / 15:16
3

Usar compgen é definitivamente uma boa ideia. Alternativamente, e isso funcionaria com qualquer shell POSIX, você poderia verificar os comandos em $PATH com:

(IFS=:; set -f; ls -- $PATH | grep top$)

com zsh :

type -m '*top'

Você também pode consultar o banco de dados whatis:

man -ks1:8 top$
    
por 25.03.2013 / 16:11
2

Embora você possa descobrir isso no sistema de conclusão , isso não é é o método mais óbvio.

Quase todos os programas instalados pelo pacakges estão em /usr/bin , portanto, você pode listar os programas em /usr/bin cujo nome termina com top :

echo /usr/bin/*top

Você pode listar os arquivos por tempo de mudança de inode. O tempo de modificação de um programa instalado é geralmente o tempo em que foi compilado, porque as ferramentas de arquivamento e instalação copiam o tempo de modificação ao lado dos dados. Mas o tempo de troca de inode de um arquivo é a última vez que algo aconteceu com ele, inclusive sendo extraído ou copiado (na verdade, ele está tendo sua hora de modificação alterada que redefine o tempo de mudança do inode). Desde que você instalou o programa recentemente, é um dos últimos mostrados pelo seguinte comando:

ls -lctr /usr/bin/*top

Remova a opção r se você quiser começar a procurar de cima e não de baixo.

Você também pode ver o log dos programas instalados. Eles estão em /var/log/history.log .

    
por 26.03.2013 / 00:04
1

Você pode usar uma função shell que pesquise seu PATH e diretórios conhecidos que contenham binários, mas que não estejam em seu PATH. Exemplo:

findprogram() {
  ls $(echo $PATH:/sbin:/usr/sbin | sed "s/:/\ /g") | grep "$1" | sort --unique
}

Uso:

findprogram top

Isso gera uma lista classificada de candidatos.

    
por 25.03.2013 / 15:16