我实现了一个shell,使用expect/spawn从远程服务器向SCP文件发送命令,在需要时自动发送密码。
该脚本在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 $passwordrn; interact }
eof { exit }
}
exit
"
我要尝试的第一件事是放弃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 $passwordr; interact }
eof { exit }
}
但真正的问题是如何通过期望过程继承工作室通道/pty(我不确定这里的适当术语)