quarta-feira, 10 de fevereiro de 2010

Configurando Bash Completion no Debian



O bash completion é uma poderosa ferramenta para administradores Linux que utilizam o shell para realizar suas tarefas, permitindo com que comandos, caminhos de arquivos e mesmo parâmetros específicos sejam autocompletados. Em geral essa feature é habilitada por padrão no Linux, porém em algumas distribuições, tal como no Debian, é preciso configurá-la manualmente. Este é justamente o tema do artigo em questão.

Antes de qualquer coisa, certifique-se de que o pacote bash-completion esteja instalado, executando a instrução a seguir:


# apt-get install bash-completion

Em seguida, é preciso indicar a utilização do bash-completion no perfil do bash. Isso pode ser feito individualmente para cada usuário, através do arquivo ~/.bash_profile, ou para todo o sistema. Para essa segunda opção, modifique o arquivo /etc/bash.bashrc, usando um editor qualquer:


# vi /etc/bash.bashrc

Verifique se as seguintes linhas estão incluídas no arquivo de configurações. Inicialmente elas já existem, porém estão comentadas (i.e. iniciadas com o caracter "#"):


# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi

A última etapa consiste em testar se o mecanismo de autocomplemento está funcionando. Para isso, é preciso sair da sessão (i.e. fazer um log out do terminal) e iniciar um novo login. Feito isso, tente digitar a inicial de algum comando (ex: service) e em seguida pressionar a tecla TAB uma vez:


# serv<TAB>

Agora que o comando "service" foi autocompletado, pressione a tecla TAB mais duas vezes para que a respectiva lista de seus possíveis parâmetros seja exibida na tela:


# service <TAB>
hwclock networking skeleton udevtrigger
apache2 hwclock-save ondemand umountfs
bootlogd keyboard-setup postfix rsyslog
console-setup procps udev umountroot
dmesg rc sendsigs urandom
halt nagios3 rc.local single

Caso o comando possua múltiplos argumentos, como é o caso do "service", podemos utilizar o TAB mais uma vez, o que fará com que apenas instruções que façam sentido sejam listadas:


# service nagios3 <TAB>
force-reload reload restart start status stop

Agora é só digitar a inicial do argumento, pressionar TAB mais uma vez e executar de vez a instrução completa:


# service nagios3 status
* checking /usr/sbin/nagios3... [OK]

Pronto! Bem fácil, né?