0
私はrsyncプロセスを開始し、パスワードを送信する簡単なexpectスクリプトを持っています。その後、私はrsyncのプロセスの結果コードをキャッチするためにウェイトを使用しています:spawnされたrsyncプロセスでwaitを使用すると、rsyncが予期して停止する
#!/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
問題は、私は(おそらく「無効なパスワード」のブロックがタイムアウト後の)パスワードプロンプトのrsyncを参照してください2秒後ということですクラッシュします。それは単に送信を停止し、Ctrl-Cでさえもはや予想を殺すことはできません。デバッグすると、waitコマンドがこの動作を引き起こすことがわかります。使用する前に
set timeout -1
expect eof
すべてが正常に機能しました。しかし、その方法ではrsyncの結果コードを取得できませんでした。
expectスクリプトに問題がありますか?これはwaitコマンドまたはrsyncのバグですか?
ありがとうございます!それがそれを解決しました。 – Werzi2001