2011-08-11 53 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