예상 유틸리티가 생성 한 프로세스가 하위 프로세스를 생성하는 경우를 처리 할 수 ​​있습니까? 작동합니다 (여기 단순화)

나는 ssh 쉘을 통해 rsync를 처리 할 것을 기대하지만 사용하지 않으려 고 노력하고있다.

내 rsync 명령을 실행하면 작동합니다 (여기 단순화) : 암호를 입력하라는 메시지가 나타나고 파일을 서버에 복사합니다.

rsync -e ssh -<other_params>

그런 다음 그것을 예상에 포함 시키면 :

expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r"

프로그램이 제대로 실행되지 않고 프로그램이 존재하며 파일이 복사되지 않습니다. 디버그 모드조차도 많은 단서를 제공하지 않습니다.

내 생각에 rsync는 ssh 프로세스를 생성하고 ssh 프로세스는 상호 작용할 필요가 있지만 send는 rsync 프로세스 ID를 가져 와서 거기에 입력을 보내는 것입니다.

이견있는 사람?



답변

이 문제에 대한 대답은 expect 스크립트의 끝에 wait 명령을 추가해야한다는 것이 었습니다. 그것은 질문에 나와 있듯이 작동했지만 암호를 보내고 즉시 프로세스를 종료했습니다. 대기를 추가하면 rsync 프로세스가 완료 될 때까지 대기합니다.

수정 된 버전 :

expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r" -c "wait"


답변