각 커밋 후에 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는 성공했습니다