Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Curso de Inglês Online

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Extendendo a funcao de completar (comandos, nomes de arquivo etc) na bash

Colaboração: Rodrigo Bernardo Pimentel

Data de Publicação: 20 de Novembro de 2003

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".

Veja a relação completa dos artigos de Rodrigo Bernardo Pimentel

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1775 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Programando o Android