← retour aux snippets

expect: automatiser des dialogues interactifs

Script Tcl/expect pour répondre à des prompts d'outils non scriptables proprement.

bash process #expect#automation#tty

objectif

Piloter des programmes interactifs (ftp, telnet, cli maison) de façon déterministe.

code minimal

expect <<'EXP'
spawn ftp data.pm
expect "Name*:"
send "user\r"
expect "Password:"
send "secret\r"
expect "ftp>"
send "quit\r"
EXP

utilisation

# avec timeout
expect -c 'set timeout 5; spawn ssh user@data.pm; expect "$ "; send "exit\r"'

variante(s) utile(s)

# lire un mot de passe depuis stdin
expect <<'EXP'
log_user 0
gets stdin pw
spawn ssh user@data.pm
expect "password:"
send "$pw\r"
EXP

notes

  • ne logguez pas les secrets; utilisez log_user 0.
  • préférez SSH keys quand possible.