Acabei de receber o seguinte e-mail e estou repassando a lista. -------------------------------------------------------------------- Endereço: http://www.Dicas-L.unicamp.br/dicas-l/20031120.shtml -------------------------------------------------------------------- 2ª Semana de Desenvolvimento em Software Livre Unicamp - Campinas - São Paulo 9 a 12 de dezembro Informações e Inscrições: http://rau-tu.ccuec.unicamp.br/sdsl ----------------------------------------------------------------------
Extendendo a funcao de completar (comandos, nomes de arquivo etc) na bash ========================================================================= Colaboração: Rodrigo Bernardo Pimentel A grande maioria de usuários de bash (o que, recentemente, significa a grande maioria de usuários de Linux) está acostumada a apertar TAB para completar nomes de comandos, nomes de arquivos etc. Por padrão, na bash, o TAB está associado à função "complete", da biblioteca "readline" (responsável, entre outras, pelo "bip" e combinações como alt-f, ctrl-u etc). O comportamento padrão do "complete", em linhas gerais, é tentar completar com um nome de comando, caso se esteja tentando completar a primeira palavra da linha (por comando entende-se qualquer arquivo executável nos diretórios especificados pela variável $PATH), ou por um subdiretório do diretório atual, caso não haja comando adequado; ou com nomes de arquivos a partir do diretório atual (a não ser que comece com /). Este comportamento simples é útil, mas certamente poderia ser mais inteligente. Por exemplo, se quero "virar" outro usuário, com o comando su, seria bom poder usar TAB pra completar com nomes de usuários. Ou, para o comando ssh, usar TAB para completar com nomes de máquinas conhecidas (no arquivo ~/.ssh/known_hosts, por exemplo). Ou, ainda, que TAB após o comando "cd" só tentasse completar com nomes de diretórios, não também de arquivos. Bem, tudo isso é possível com a função "complete" do bash (a partir da versão beta 2.04). Note: o que efetivamente completa os nomes é a função "complete" da biblioteca readline. A função "complete" do bash serve para customizar o comportamento da função de mesmo nome na readline. De maneira simplificada, a função "complete" tem a seguinte forma: complete -A <acao> <comando> em que <acao> indica como gerar a lista de possíveis palavras a completar e <comando> indica para que comando (ou, enfim, início de linha) completar com aquela regra. Por exemplo, para o exemplo do "su" acima, poderíamos usar: complete -A user su A maioria das ações têm uma abreviação. No caso de "-A user", posso usar "-u": complete -u su Como há outros comandos que também só fazem sentido com usuário, eu posso indicar vários comandos de uma vez: complete -u su usermod userdel passwd chage write chfn groups slay Para o exemplo do "cd", poderíamos usar complete -d cd Para situações mais específicas, ou mais complexas, como pegar nomes de hosts para o ssh, é possível criar funções de bash para gerar a lista de palavras com que completar o comando. Com isso, a função "complete" fica extremamente flexível. Na Debian, o pacote "bash" (se em uma versão que já suporta "programmable completion") já instala um arquivo com uma série de configurações úteis nesse sentido, em /etc/bash_completion . Além disso, programas diversos podem instalar arquivos específicos em /etc/bash_completion.d , no melhor estilo Debian de fazer configurações flexíveis. Quem não usa Debian (não sei se outras distribuições incluem este arquivo, mas pelo que entendi algumas têm um pacote separado, "bash_completion") pode pegar os arquivos de configuração em http://freshmeat.net/projects/bashcompletion/ . Na Debian, essas configurações vêm desabilitadas por padrão, por serem diferentes do normalmente esperado. Para habilitá-las, basta descomentar (tirar os símbolos de "#") as seguintes linhas em /etc/bash.bashrc : #if [ "$PS1"-a -f /etc/bash_completion ]; then # . /etc/bash_completion #fi Ou, para habilitá-las somente para o seu usuário, coloque em seu ~/.bashrc : if [ "$PS1"-a -f /etc/bash_completion ]; then . /etc/bash_completion fi Esse arquivo inclui "~/.bash_completion", então você pode colocar customizações lá, se quiser. Para mais informações, dê uma olhada em /etc/bash_completion e leia "man bash", seções "programmable completion" e "completing" e a descrição da função "complete". -------------------------------------------------------------------- Unix Comandos de Usuários - Guia de Consulta Rápida http://novateceditora.com.br/guias/unixcomandos/ -------------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para 23107 assinantes. Todas as mensagens da Dicas-L ficam armazenadas em http://www.Dicas-L.unicamp.br. A redistribuição desta e outras mensagens da lista Dicas-L pode ser feita livremente, deste que o conteúdo, inclusive esta nota, não sejam modificados. ---------------------------------------------------------------

