Ich habe ein einfaches expect-Skript, das einen rsync-Prozess startet und das Kennwort sendet. Danach bin ich mit Warten, um das Ergebnis Code des rsync-Prozess zu fangen:Verwenden der Wartezeit auf den erzeugten rsync-Prozess stoppt rsync in expect
#!/usr/bin/expect
# check arguments
if { $argc != 3 } {
puts "Usage $argv0 src dest password"
exit 1
}
# set arguments
set src [lindex $argv 0]
set dest [lindex $argv 1]
set password [lindex $argv 2]
# call rsync
spawn rsync --delete --exclude=.svn -rvae ssh $src $dest
# confirm connect question
set timeout 2
expect {
*connecting* {send "yes\r"}
}
# send password
set timeout 5
expect {
*assword: {send "$password\r"}
}
# invalid password
set timeout 2
expect {
*denied* {exit 2}
}
# get process result
lassign [wait] pid spawnid os_error_flag value
# exit with error code
exit $value
Das Problem ist, dass 2 Sekunden nachdem ich das Passwort-Eingabeaufforderung (wahrscheinlich nach dem „ungültig Kennwort“ Blockzeiten out) rsync sehen stürzt ab. Es hört einfach auf zu senden und selbst Ctrl-C kann das nicht mehr erwarten. Das Debugging beweist, dass der Befehl wait dieses Verhalten verursacht. Bevor ich benutzte
set timeout -1
expect eof
und alles hat gut funktioniert. Aber so konnte ich den Ergebniscode von rsync nicht abrufen.
Gibt es ein Problem in meinem expect-Skript oder ist das ein Fehler im Befehl wait oder rsync?
Vielen Dank! Das hat es gelöst. – Werzi2001