【问题标题】:Expect script doesn't execute properly through PHP期望脚本无法通过 PHP 正确执行
【发布时间】:2015-12-16 20:17:42
【问题描述】:

环境

Centos 6.7

Plesk 12

Apache 2.2.15

PHP 5.4

期望脚本是:

exp_internal 1
spawn /bin/su root
expect "Password: " 
send "supersecretthing\n" 
expect "$"
send "service iptables start\n"
expect eof
exit

我没有 #! 语法,因为我通过 expect /absoluteRoute/MyScript 执行脚本。

当我通过 Shell 调用 expect /absoluteRoute/MyScript 时,这很酷。它按照它应该做的那样做。但如果我通过 Web 浏览器尝试以下操作:

<?php
   echo exec ('/usr/bin/expect /absoluteRoute/MyScript');
?>

PHP 代码最终显示如下:

spawn /bin/su root

我已经阅读了其他问题,我创建了 /var/www/.ssh 文件夹选项,但没有。

我想了解为什么我不能通过 PHP 执行期望脚本。是的,该脚本具有适当的权限和所有权。

【问题讨论】:

  • 你希望看到什么?

标签: php shell expect


【解决方案1】:

我认为问题可能是由expect 脚本引起的。改成这样

spawn su root
expect "Password: "
send "pwd\r"
expect "\\\$"; # Matching literal dollar sign
send "service iptables start\r"
expect "\\\$"; # Matching prompt again.
# After sending 'exit' only, we can expect 'eof'
send "exit\r"
expect eof

我已经测试过这个脚本,它可以通过php 很好地执行。

注意:

或者,为了匹配一些常见的已知提示,您可以定义一个变量,如

set prompt "#|>|%|\\\$ $"; # We escaped the `$` symbol with backslash to match literal '$' 

最后一个美元符号代表行尾。

在使用 expect 时,我们必须附带 -re 标志以将其指定为正则表达式。

expect -re $prompt

【讨论】:

  • 没有这样的运气(进行了更改,发生了相同的显示)。不过我使用的是 Drupal 7,我猜这就是问题所在。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2011-07-03
  • 1970-01-01
  • 2012-03-26
相关资源
最近更新 更多