2011-08-11 2 views
0

expect/spawn을 사용하여 쉘을 구현하고 필요할 때 자동으로 암호를 보내는 원격 서버에서 SCP 파일에 명령을 전송했습니다.C++ 프로세스에서 "expect"스크립트를 호출하십시오.

스크립트는 UNIX 터미널에서 올바르게 작동합니다.

그럼에도 불구하고이 스크립트를 사용하여 C++ 프로세스를 사용하려고했습니다. 그것은 system() 또는 심지어 popen() 함수에 의해 성공없이 호출되었습니다. 이 오류가 반환됩니다. "ioctl (원시) : I/O 오류" 누군가 실마리가있을 수 있습니까?

내 스크립트입니다

#!/bin/bash 
targetHost=$1 
password=$2 
sourceFile=$3 

destRep=$4  
expect -c "   
     spawn /usr/bin/scp -q $targetHost:$sourceFile $destRep 
     expect -i $spawn_id { 
      "*password:*" { send -i $spawn_id $password\r\n; interact } 
      eof { exit } 
     } 
     exit 
     " 

답변

0

내가 노력하겠다고 제일 먼저 bash는 스크립트를 도랑입니다

#! /usr/bin/env expect -f 
foreach {targetHost password sourceFile destRep} $argv break 
spawn /usr/bin/scp -q $targetHost:$sourceFile $destRep 
expect -i $spawn_id { 
    "*password:*" { send -i $spawn_id $password\r; interact } 
    eof { exit } 
} 

(이 어쨌든 문제를 인용 한 것으로 나타났습니다)하지만 진짜 문제는 stdio channels/pty가 expect 프로세스에 의해 어떻게 상속되는지 (적절한 용어가 확실하지 않음)

+0

감사합니다. – vince31

+0

답장을 보내 주셔서 감사합니다. 이 문제를 쉽게 해결할 수있는 방법을 기대하지는 못했지만 그렇게했습니다. 내 문제를 완전히 해결했습니다. 앞으로 갈 수 있습니다. 건배 glenn. – vince31

관련 문제