0

我使用expect/spawn 实现了一个shell,并从远程服务器向SCP 文件发送命令,该服务器在需要时自动发送密码。

该脚本在 UNIX 终端上运行良好。

尽管如此,我还是尝试通过 C++ 进程来使用这个脚本。它已被 system() 甚至 popen() 函数调用但没有成功。返回此错误:“ioctl(raw): I/O error” 有人可能有任何线索吗?

这是我的脚本:

 #!/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
        "
4

1 回答 1

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 通道/pty 如何被期望进程继承(我不确定这里的正确术语)

于 2011-08-11T14:20:49.850 回答