Expect脚本不';无法通过PHP正确执行

Expect脚本不';无法通过PHP正确执行,php,shell,expect,Php,Shell,Expect,环境 Centos 6.7 普莱斯克12 Apache 2.2.15 PHP5.4 expect脚本是: exp_internal 1 spawn /bin/su root expect "Password: " send "supersecretthing\n" expect "$" send "service iptables start\n" expect eof exit 我没有这个!语法,因为我通过expect/absoluteRoute/MyScript执行脚本 当我通过She

环境

Centos 6.7

普莱斯克12

Apache 2.2.15

PHP5.4

expect脚本是:

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');
?>
我读过其他问题,我创建了/var/www/.ssh文件夹选项,但什么都没有


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

我认为问题可能是由于
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

你希望看到什么?没有这样的运气(做出了改变,同样的展示发生了)。不过我使用的是Drupal7,我想这就是问题所在。
expect -re $prompt