2011-08-11 54 views
0

我使用expect/spawn實現了一個shell,並將命令從遠程服務器發送給SCP文件,在需要時它會自動發送密碼。在C++過程中調用「expect」腳本

該腳本在UNIX終端上正常工作。

儘管如此,我試圖通過C++過程來使用這個腳本。它已被system()或甚至popen()函數調用而沒有成功。 返回此錯誤:「ioctl(raw):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是如何通過期望過程繼承的(我不確定這裏是否有適當的術語)

+0

感謝您的回答, – vince31

+0

感謝您的回覆和更正。 我並不期待解決這個問題的簡單方法,但你做到了。 你完全解決了我的問題,我現在可以前進 乾杯glenn。 – vince31