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
🙂