期望脚本不能通过PHP正确执行

时间:2015-12-16 11:06:00

标签: php shell expect

环境

Centos 6.7

Plesk 12

Apache 2.2.15

PHP 5.4

期望脚本是:

$resized = false;

$(window).on('resize', function(){

if($(window).width() <= 1024 && $resized==false){

$("header > .content-max > .row").prepend( '<a href="#" class="logout"><svg class="pulse" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 22.3 22.3" style="enable-background:new 0 0 22.3 22.3;" xml:space="preserve"><g><g><path class="st0" d="M11.2,0C5,0,0,5,0,11.2c0,6.2,5,11.2,11.2,11.2c6.2,0,11.2-5,11.2-11.2C22.3,5,17.3,0,11.2,0z M17.6,17.6 c-1.7,1.7-4,2.7-6.5,2.7c-2.4,0-4.7-1-6.5-2.7C3,15.9,2,13.6,2,11.2c0-2.4,1-4.7,2.7-6.5S8.7,2,11.2,2c2.4,0,4.7,1,6.5,2.7 c1.7,1.7,2.7,4,2.7,6.5C20.3,13.6,19.4,15.9,17.6,17.6z"/><path class="st0" d="M11.2,4.3c-0.6,0-1,0.4-1,1l0,11.8c0,0.6,0.4,1,1,1c0.6,0,1-0.4,1-1l0-11.8C12.2,4.7,11.7,4.3,11.2,4.3z"/></g></g></svg></a></a>' );

$("header > .content-max > .row").prepend( '<a href="#" class="mobile-nav"><span class="icon-bar"></span><span class="icon-bar"></span></a>' );

$(".mobile-nav").click(function() {
    $(this).toggleClass("pushed");
    $("#main-nav").slideToggle(300);
});

$("body").prepend('<a href="#" class="top">Top</a>');

$resized = true;

} else {

$resized = false;

}

});

我没有#!语法,因为我通过exp_internal 1 spawn /bin/su root expect "Password: " send "supersecretthing\n" expect "$" send "service iptables start\n" expect eof exit 执行脚本。

当我通过Shell呼叫expect /absoluteRoute/MyScript时,它很酷。它确实如此。但是,如果我通过Web浏览器尝试以下操作:

expect /absoluteRoute/MyScript

PHP代码最终会显示:

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

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

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

1 个答案:

答案 0 :(得分:0)

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