Algum dia você já precisou criar algum shell script para manipular algum prompt, ou automatizar alguma configuração, e se deparou com um comando interativo e desistiu?
Bom, já salva esse artigo aqui nos favoritos, que preciso falar sobre o comando expect, o expect é uma linguagem de script projetada para automatizar programas interativos. Bem antes de começar a usar o expect em um script bash, você precisa instalar em seu sistema (disponível apenas para Unix), aqui você encontra informações detalhadas sobre o expect.
Vamos lá, primeiro vamos realizar a instalação:
Debian/Ubuntu:
$ sudo apt-get install expect
CentOS:
$ sudo yum install expect
Agora que você já realizou a instalação, vamos para um exemplo simples para demostrar a utilização, vamos supor que temos um programa prompt/console onde precisamos passar dois parâmetros, nome e sobrenome.
# Arquivo prompt.py
nome = input('informe seu nome: ')
sobrenome = input('informe seu sobrenome: ')
print(nome +' '+sobrenome)
Em resumo, ao executar o programa acima ele vai pedir primeiro o nome, depois o sobrenome e por fim imprimir no console nome junto ao sobrenome.
Imagine que você precisa executar esse processo todo santo dia, mas você já tem os valores, para esse caso (hipotético), e muitos outros onde você precisa lidar com command line interativos, que podem ter vários inputs que o expect vai te ajudar, então vamos para o um exemplo de como resolver o caso acima. Vamos criar um arquivo, usando o comando abaixo.
$ touch expect.sh
Agora vamos abrir o arquivo criado.
$ vi expect.sh
Quando aberto, mude para o modo insert, e cole o código abaixo
#!/usr/bin/expect
spawn python3 prompt.py
expect "informe seu nome:"
send -- "Matheus\r"
expect "informe seu sobrenome:"
send -- "Moreira\r"
expect eof
Agora de a permissão para executar.
$ chmod +x expect.sh
Depois que finalizar basta a criação do script e ter concedido a permissão de executar, basta rodar o shell script sempre que precisar.
fulano@xpto:~/Workspace/expose$ ./expect.sh
spawn python3 prompt.py
informe seu nome: Matheus
informe seu sobrenome: Moreira
Matheus Moreira
E isso pessoal, espero que gostem, sei que existem outras formas de lidar com command line interativo, mas a solução que o expect proporciona resolve quase que todas as situações que precisei utilizar e por isso achei importante compartilhar.