você está aqui: Home  → Arquivo de Mensagens

Criando complementações no Bash completion para comandos específicos

Colaboração: André Leon S. Gradvohl

Para executar o sistema distribuído com o qual estou trabalhando, eu tive que escrever um script que instancia processos em diferentes nós de um cluster, como no exemplo a seguir:

startSEEPManyNodes.sh node1-proc node2-proc node3-proc 

A questão é que ficar digitando os nomes dos nós onde quero instanciar os processos é muito trabalhoso. Afinal são 32 nós, nem todos devem ser instanciados com o comando e a ordem de instanciação pode mudar.

Sendo assim, resolvi explorar o recurso completion do Bash para facilitar a tarefa. O comando que usei foi o seguinte:

complete -o default -W "node1-proc node2-proc node3-proc" startSEEPManyNodes.sh 

Detalhando as opções que usei:

  • A opção -o indica o comportamento do autocomplemento, caso não seja possível completar os parâmetros. Nesse caso, usei a opção default.
  • A opção -W indica a lista de palavras (entre aspas duplas) que podem ser usadas para completar o comando. Por simplificação, coloquei os nomes de apenas três nós do cluster, mas você pode colocar quantas strings quiser ou ainda usar pequenos scripts para expandir essa lista.
  • Por fim, o comando que utilizará o recurso para autocompletar.

    Adicionei a linha a seguir no arquivo .profile et voilá! Agora não preciso digitar tantos nomes.

    complete -o default -W "echo node{1..32}-proc" startSEEPManyNodes.sh 
    

Observe que o comando echo node{1..32}-proc entre aspas expandirá os 32 nomes dos nós (node1-proc node2-proc ... node32-proc).

Detalhes sobre o comando recurso completion do Bash podem ser encontradas no site a seguir:

Bash Reference Manual

É isso.

André Leon S. Gradvohl é docente na Faculdade de Tecnologia da UNICAMP. Atualmente ele está realizando Pós-doutorado na França no Laboratoire d'Informatique de Paris 6 (LIP6), na área de Sistemas Distribuídos.


Veja a relação completa dos artigos de André Leon S. Gradvohl