【问题标题】:PHP exec expect script with SCP带有SCP的PHP exec期望脚本
【发布时间】: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 成功了。让它成为一个答案,我会接受它。

标签: php ssh cygwin expect scp


【解决方案1】:

您可以使用interact 以交互方式与生成的应用程序交互。

如果您想生成一个程序,向它发送一些数据,然后等待它完成,请改用expect eof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 2019-03-09
    • 2017-01-22
    • 1970-01-01
    • 2014-02-19
    • 2015-05-28
    • 2016-04-13
    • 2019-10-03
    相关资源
    最近更新 更多