我正在尝试在 svn 上实现一个提交后挂钩,它将在每次提交后将一些文件从 svn 机器 scp 到其他备份机器。我用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 成功