我在C:\WampServer\www\dnsmasq\php\dnsmasq.php有一个PHP脚本:
function uploadConfig() {
exec('C:cygwin64binexpect -f /home/Dave/bin/scp.expect asdf', $output, $exitCode);
print_r($output);
print($exitCode);
}
在/home/Dave/bin/scp.expect 调用脚本:
#!/usr/bin/expect -f
set password [lindex $argv 0]
spawn /usr/bin/scp /home/Dave/bin/test root@192.168.1.1:/etc/test
expect {
-re ".*yes.*no.*" {
exp_send "yesr"
exp_continue
}
-re ".*password.*" {
exp_send "$passwordr"
}
}
interact
要上传的文件包含一行:
Testing
运行 uploadConfig 函数会在页面上产生以下输出:
Array ( [0] => spawn /usr/bin/scp /home/Dave/bin/test root@192.168.1.1:/etc/test [1] => root@192.168.1.1's password: ) 0
该文件出现在服务器上的/etc/test 上,但它是空白的,即它不包含"测试"一词。
我可以在 cygwin shell 中运行期望脚本,它会上传包含以下内容的文件:
$ expect -f /home/Dave/bin/scp.expect asdf
当我尝试从 PHP 执行此操作时,我不确定失败点在哪里。
当你想与生成的应用程序进行交互时,你可以使用interact
,猜猜怎么着。
如果要生成一个程序,请向其发送一些数据,然后等待它完成,请改用expect eof
。