各コミットの後、svnシステムの一部のファイルを別のバックアップシステムにscpするコミット後のフックをsvnに実装しようとしています。以下のようにExpectを使用してスクリプトを作成しました。
spawn /usr/bin/scp -r $l_dir $r_usr@$r_host:/$r_dir
expect {
timeout { send_user "Timeout"; exit 1 }
eof { send_user "\nConnect failed for $r_host at \n"; exit 1 }
-re ".*es..o.*" {
send_user "sending yes\n"
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
send_user "sending password\n"
exp_send "$r_pwd\r"
}
}
interact
スクリプトはコミット後(bashスクリプト)から呼び出され、必要なすべての変数を提供します。
問題は、コミット後にフックを実行するときです。
./post-commit
これでscpが成功します。ただし、実際のコミットでトリガーされると、ログインしてパスワードを提供できますが、ファイルはコピーされません。
デバッグ出力を含むスクリプトの表示(コミットトリガーで実行されている場合)
sending password
send: sending "vashishth\r" to { exp3 }
interact: received eof from spawn_id exp0
RSAキーを使用することは不可能であるため、パスワードでscpを使用する必要があります。どんな助けでも大変感謝します。
ベストアンサー1
cronなどで期待を実行するとき、このような状況がインタラクティブでは機能しないことをインターネット検索で調べたので、交換しました。
interact
そして
expect eof
exit
そしてscpは成功しました