Tcl/Expect: Automatização de comandos interativos no Linux · Buteco Tecnológico
07/10/2014 · 4 minutos de leitura
Neste artigo iremos abordar a automatização de comandos com o Tcl/expect.
Tcl é, segundo a Wikipédia, uma linguagem de script para rápida prototipação. Tcl significa Tool Command Language, e foi criada no ano de 1988 por John Ousterhout. Para mais informações sobre Tcl, sua origem ou outros dados, você pode verificar a Wikipedia.
Seu aprendizado é bem simples, sendo que, ao meu ver, é uma linguagem parecida com Bash e Python. Uma exemplo de Hello World com ela pode ser feito com:
Para executar comandos Tcl, será necessário instalar o interpretador Tcl. Atualmente todas as maiores distribuições Linux contém o Tcl em seus repositórios. Existem muitos exemplos de como usar Tcl. Você pode ver alguns deles no Wikibooks.
Expect é uma extensão da linguagem Tcl para automatizar interações com programas em modo texto. Este foi escrito por Don Libes em 1990, e inicialmente foi escrito para ser executado em sistemas UNIX e para poder controlar programas interativos como o ftp, ssh, telnet e vários outros. Como o Tcl, o interpretador expect também precisa ser instalado. Este também está nos repositórios das distribuições Linux.
Sua facilidade de controlar programas interativos se deve ao fato do Expect poder executar um programa e manter uma espécie de "handler" desse programa. Este handler se chama spawn_id. Com este spawn_id o programador consegue enviar comandos e também esperar por padrões de saída do programa. Como primeiro exemplo será mostrado um telnet, onde interativamente precisamos informar usuário e senha, e neste caso será automatizado pelo Expect:
spawn /usr/bin/ssh $username@$server
-nocase "password: " {
Nó código acima podemos ver uma função de Tcl/Expect para criar uma conexão SSH. No Tcl os parâmetros não tem tipos, são tratados como strings. Após enviar a senha para o usuário especificado na conexão, a função executa o comando interact. Após este comando, o usuário pode digitar normalmente no terminal dentro da sessão de SSH remota.
Espero ter abordado o Tcl/Expect com a simplicidade que este de fato tem, e ajudado a facilitarem suas vidas com esta linguagem :)
No próximo artigo pretendo escrever sobre pexpect, que é a integração do Python com Expect, deixando este trabalho ainda mais simples!