Para automatizar comandos, usei ao longo dos anos espero . É ótimo simular uma sessão interativa, seja ao lidar com comandos difíceis que exigem interatividade, ou para interagir com dispositivos ativos ou outros servidores em sua rede. Eu ainda uso para acessar o equipamento ativo, buscar algumas estatísticas e realizar backups automáticos.
Expect is a program that "talks" to other interactive programs according to a script. Following the script, Expect knows what can be expected from a program and what the correct response should be. An interpreted language provides branching and high-level control structures to direct the dialogue. In addition, the user can take control and interact directly when desired, afterward returning control to the script.
Usando o Expect Scripts para automatizar tarefas
Como exemplo, um script de expectativa que escrevi para testar o serviço POP:
#!/bin/sh
# \
exec expect "$0" ${1+"$@"}
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
set timeout -1
spawn telnet 127.0.0.1 110
match_max 100000
expect {
"Hello" { send -- "USER [email protected]\r"; exp_continue
}
"assword" { send -- "PASS password\r" ; exp_continue
}
"logged" {
send -- "LIST 1\r" ; exp_continue
}
-re "failed|denied" { exit
}
"OK 1" { send -- "QUIT\r"; }
}
De acordo com minha conversa com @cas, eu também gostaria de salientar que o simples regexp espera que o subconjunto de linguagens seja útil para scripts de automações curtas / protótipos [muito] aproximados, junto com o bash.
Se houver necessidade de manipulação mais complicada da saída, o manuseio interativo pode / melhor ser feito com outra linguagem de programação.
Por exemplo, em python, pexpect , ou mesmo em C, usando libexpectar ou miniexpect .
Recentemente, com o movimento devops, você também tem toda uma série de novos [e antigos] frameworks para automatizar tarefas do sistema, como Ansible , Fantoche, sal.
Eles exigem, no entanto, uma curva de aprendizado e mais recursos. Eu pessoalmente sou a favor do Ansible.