2011-05-19 17:44:08
Interaktionen mit expect
Auch wenn die "großen" Zeiten von Tcl/Tk ("Tickel-Tikay") vorbei sind, es gibt immer noch einige Leute, die die Scriptscprache und das Toolkit nutzen. Es ist stabil und gut dokumentiert. Ein aus dem Tcl-Umfeld entstandenes Programm ist expect, mit dem man Interaktionen bzw. Dialoge mit anderen Programmen oder auch Serverdiensten realisieren kann.
Die man-page zu expect erklärt die Grundlagen. Hier ist ein Beispiel für die Verwendung von expect aus einem bash-Script heraus:
> cat check_easyraid.sh
#!/bin/bash
CMD=$1
[ "$CMD" ] || {
echo "usage: echo PASSWD | $0 easyraidcommand ip-address"
exit 1
}
IP=$2
[ "$IP" ] || exit 2
ulimit -t 4
read -t 1 PASS
cat <<EOF |expect -|egrep 'Disk State:|State :|s status is'
match_max 65536
spawn telnet $IP
expect "name:"
send "admin\n"
expect "passwd:"
send "$PASS\n"
expect "ACSCLI"
send "$CMD\n"
#interact -nobuffer -re "Disk State:"
expect "ACSCLI"
#send_user "output: $expect_out(buffer)"
send "quit\n"
close
EOF
Das Script baut eine telnet-Session zu einem easyRAID-SAN auf und schickt Befehle zum Testen ab. Man kann mit expect auch ftp-Sessions oder andere Interaktionen aus Scripts heraus einfach handhaben. Das Beispiel ist ein Mix aus bash und expect, aber man kann mit dem passenden Shebang natürlich auch "reine" expect-Scripts schreiben.