コミット後に実行すると、予想されるscpディレクトリは機能しません。

コミット後に実行すると、予想されるscpディレクトリは機能しません。

各コミットの後、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は成功しました

おすすめ記事