#FISL 12: Automatizando tarefas ao máximo com #expect

A palestra do Leandro Nunes (@nunesleandro, http://leandronunes.org) foi interessante, mais informativa que a do ano passado, quando me decepcionei. Não que desta vez não tenha me decepcionado, mas pelo menos o Leandro usou o tempo melhor, e falou um pouco mais do expect, embora *pra mim* ainda não tenha sido o suficiente. Ele poderia, por exemplo, ter mostrado um exemplo de código ocultando textos sensíveis como senhas, que por padrão são enviados em texto plano pelo expect.

Bom, mas vamos às informações importantes da palestra.

O Leandro mostrou a sequência básica spawn/expect/send, deixando claro que o uso da ferramenta é bastante simples. O spawn faz a execução do comando desejado, o expect aguarda por uma sequência de caracteres para acionar o send, que envia o texto desejado (comandos, senhas, etc). Abaixo segue o exemplo demonstrado na apresentação:

#!/bin/bash
spawn ssh localhost
set timeout 5
expect "% password:"
send "minha senha\r"
expect "%"
send "ls -lsa\r"
expect "%"
send "exit\r"
expect eof

O Leandro explicou ainda que o script pode ser iniciado com a linha "#!/usr/bin/expect" para acionar diretamente a execução sem a necessidade de acionar o expect na linha de comando. Nos testes que fiz foi necessário adicionar um parâmetro "-f" na linha indicada, de forma que o resultado seria "#!/usr/bin/expect -f". Assim é possível executar o script diretamente (./script).

Outra informação importante é o fato de que scripts para o expect devem ser feitos em TCL, portanto esqueça variáveis de ambiente como $1 para pegar parâmetros da linha de comando. É necessário utilizar a variável argv, através de comandos como "set user [lindex $argv 0]", o que faz com que o primeiro parâmetro indicado na linha de comando seja colocado na variável $user.

A apresentação está disponível no site do Leandro, mas para quem quer mais informação sobre o expect, recomendo uma olhada na Wikipedia, e para informações sobre como criptografar senhas para uso com o expect, este artigo pode ser útil.

Siga-nos no Twitter! ou Buzz
Receba os textos via e-mail ou RSS!
Confira outros textos sobre o tema!

Christian Guerreiro

Professor por vocação, blogueiro e servidor público por opção, amante da tecnologia e viciado em informação.


Ensino a distância em Tecnologia da Informação: Virtualização com VMware, Big Data com Hadoop, Certificação ITIL 2011 Foundations e muito mais.


Suporte o Tecnologia que Interessa!

Você acha que as informações compartilhadas aqui são úteis?
Então me ajude a produzir ainda mais e melhores conteúdos!


É muito fácil. Basta divulgar nossos treinamentos pra alguém que conheça!


E se for de Salvador, podemos estruturar um curso presencial para sua empresa!

Eu vou ficar muito grato (e quem fizer os curso também :)!