Depois de bash_completion, command_not_found

Para quem não conhece o bash_completion, não é mais que um conjunto de scripts que nos ajudam mais do que o habitual TAB para completar a linha de comandos.

Habitualmente quando a TAB é usada na linha de comando, surgem sugestões para completar o que começámos a escrever. Estas sugestões baseiam-se em comandos internos da bash, em aplicações que estejam na PATH ou em nomes de ficheiros do directório actual.
Com o bash_completion, não só temos a funcionalidade original, como sugestões de opções para alguns comandos, filtros de tipo de ficheiro por aplicação (executando um editor de imagem só nos são sugeridas os ficheiros do directório actual que são imagens editáveis por esse programa), nomes de utilizador, ips/hosts que estão no nosso ~/.ssh/known_hosts (se o ssh estiver configurado para guardar os ips/hosts, que não está no Ubuntu), páginas do manual (manpages), etc.

Além disto a uma vez que este sistema se baseia na possibilidade de programar o mecanismo de sugestões, a funcionalidade pode ser ampliada pelo utilizador através de novos scripts.

Como é parte da própria bash, nalgumas distribuições o bash_completion é instalado aquando da instalação do pacote bash. No Ubuntu podem activar este sistema de sugestão modificando (apagando o #) o final do ficheiro ~/.bashrc

#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi

Hoje no Feisty foi introduzida como recomendação do pacote ubuntu-standard um novo sistema de sugestões, o command_not_found. Este script verifica se existe disponível para instalação nos repositórios de software um determinado comando introduzido que não tenha sido encontrado, dando instruções de como instalar a aplicação referente a esse comando.

Ao contrário do bash_completion, o command_not_found vem activado por omissão em /etc/bash.bashrc. Basta executar um comando inexistente para ver o resultado:

$ kismet
The program ‘kismet’ is currently not installed. You can install it by typing:
sudo apt-get install kismet
Make sure you have the ‘universe’ component enabled
bash: kismet: command not found

🙂

4 comentários em “Depois de bash_completion, command_not_found”

  1. Mozilla Firefox 1.5.0.10 Windows XP

    Ora ai está algo engraçado! :oP

    Qualquer dia experimento…mas…ou é de mim ou isso quebra um pouco a performance na execução de comandos e torna-se chato passado algum tempo de usarmos?

    Hugz,
    Luís

  2. Mozilla Firefox 2.0.0.2 Ubuntu Linux

    Quando um comando não é encontrado a bash chama um handler, na implementação actual este handler chama um script python que faz um query à bd de software para saber se existe o comando e em que repositório. Embora a bash tenha vários mecanismos de caching, a resposta não é imediata.

    É engraçado no âmbito de alguém seguir um tutorial para uma operação qualquer na linha de comando e dar-lhe um erro de command not found. Assim fica-se a saber como instalar o comando em falta.

    Duvido que seja algo eu usasse, ou que me fizesse falta, e daí talvez quando não se sabe a que pacote um comando pertence…

    Cheers 🙂

  3. Mozilla Firefox 2.0.0.3 Windows XP

    Isto faz-me lembrar uma coisa muito simples que uso há muitos anos na minha tcsh (sim eu não uso bash). A correcção dos comandos. Basta colocar no .cshrc um dos dois:

    set correct = cmd
    set correct = all

    a diferença é que o primeiro corrige apenas o comando e o segundo corrige toda a linha. Eu uso normalmente o primeiro. Dá imenso geito na correcção dos typos que os “putos que tem a mania de escrever depressa dão tantas vezes” 😉

    O ubuntu tem isto por defeito? Eu aprendi isto porque um Suse já antigo que usei (7.x) tinha por defeito. Depois quando mudei de distribuição senti-lhe a falta e fui descobrir como activar 🙂

    Vtrain

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

*