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:
É 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.