从提交后运行时期望 scp 目录不起作用

从提交后运行时期望 scp 目录不起作用

我正在尝试在 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 成功

相关内容