【问题标题】:Call "expect" script in C++ process在 C++ 进程中调用“expect”脚本
【发布时间】:2011-10-25 00:34:38
【问题描述】:

我使用 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
        "

【问题讨论】:

    标签: expect ioctl ioerror


    【解决方案1】:

    我要尝试的第一件事是放弃 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 如何被期望进程继承(我不确定这里的正确术语)

    【讨论】:

    • 感谢您的回复和更正。我没想到有一种简单的方法可以解决这个问题,但你做到了。你完全解决了我的问题,我现在可以继续干杯格伦。
    猜你喜欢
    • 2015-05-21
    • 2014-07-07
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多