2015-12-16 85 views
0

環境Expect腳本不會通過PHP正確執行

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執行期望腳本。是的,該腳本具有適當的權限和所有權。

+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 '$' 

最後一個美元符號表示行結束一些常見的已知的提示,你可以定義一個變量。

雖然期望被使用,但我們必須伴隨-re標誌來指定它作爲正則表達式。

expect -re $prompt 
+0

沒有這樣的運氣(做了更改,發生了相同的顯示)。雖然我使用Drupal 7,但我會猜測這是問題所在。 – Chayemor