2012-12-30 136 views
2

我在我的redhat上有php腳本,即時通過telnet客戶端以根用戶身份登錄。
我的PHP腳本來運行bash腳本是(functions.inc):PHP腳本exec bash腳本不打印所有bash行

<?php 
exec('/ilantest/testscript.sh'); 
?> 

我的bash腳本:

#!/bin/bash 
echo "Hello world" 
echo "Whats going on ?" 

當我做:PHP functions.inc - 我得到如下:
怎麼回事?[root @ X ilantest]#

爲什麼我不看第一行?
謝謝!

+0

那是什麼「E」第一回聲語句之後做什麼? – Icarus3

+0

抱歉,沒有「e」修復Q .. +當我./testscript.sh它工作正常並打印2行 – ilansch

+1

[返回Perl輸出到PHP]可能的重複/ questions/21407590/return-perl-output-to-php) –

回答

4

exec()http://us3.php.net/manual/en/function.exec.php#refsect1-function.exec-returnvalues

最後線從命令的結果。如果您需要執行 命令並將命令中的所有數據直接傳回 而不受任何干擾,請使用passthru()函數。要獲得執行命令的輸出 ,請務必設置並使用輸出 參數

所以:

exec('/ilantest/testscript.sh', $output); 
echo implode("\n", $output); 
+0

或者更好地使用另一個函數,它總是返回輸出。 – gaRex

+1

@gaRex,當然OP會希望檢查腳本的返回值,並確保在執行implode()之前$ output不是空的,但這一切取決於OP如何編寫shell腳本。 –

+0

那麼使用proc_ *函數堆棧甚至可能會更好。 – gaRex

1

在你的PHP腳本嘗試

echo system('/ilantest/testscript.sh'); 
+0

確定所有字符串與\ n(!),但重複最後一個...使用'shell_exec()'代替系統,不會導致副作用。 –

1

只有當你不指定任何參數來接收輸出的最後一行將被打印。從exec()手冊:

如果輸出參數存在,則該指定的數組將 填充來自指令輸出的每一行。尾數 空格(例如\ n)未包含在此數組中。請注意,如果 數組已包含某些元素,則exec()將追加到數組的末尾 。如果您不希望函數追加元素, 在將數組傳遞給exec()之前會調用unset()方法。

你可以傳遞一個陣列接收所有行:

<?php 
$lines = array(); 
exec('/ilantest/testscript.sh', $lines); 
foreach($lines as $i) { 
    echo $i; 
} 
?>