【发布时间】:2014-01-16 18:46:09
【问题描述】:
我在 C:\WampServer\www\dnsmasq\php\dnsmasq.php 有一个 PHP 脚本:
function uploadConfig() {
exec('C:\cygwin64\bin\expect -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 "yes\r"
exp_continue
}
-re ".*password.*" {
exp_send "$password\r"
}
}
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 但它是空白的,即它不包含单词“Testing”。
我可以在 cygwin shell 中运行 expect 脚本,它会上传包含内容的文件:
$ expect -f /home/Dave/bin/scp.expect asdf
当我尝试从 PHP 执行此操作时,我不确定故障点在哪里。
【问题讨论】:
-
尝试将
interact替换为expect eof。在开发期望脚本时,请在生成之前添加exp_internal 1。 -
这真的很有帮助!我不知道 exp_internal 选项,这意味着我得到的调试信息为零。 -d 参数显然做同样的事情。我会尽快尝试。
-
@glennjackman
expect eof成功了。让它成为一个答案,我会接受它。