PHP脚本exec bash脚本不会打印所有bash行

时间:2012-12-30 16:47:01

标签: php bash exec

我的redhat上有php脚本,我通过telnet客户端以root身份登录 我运行bash脚本的PHP脚本是(functions.inc):

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

我的Bash脚本:

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

当我这样做:php functions.inc - 我得到以下内容:
怎么回事?[root @ X ilantest]#

为什么我看不到第一行? 谢谢!

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

在你的php脚本中试试

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

答案 2 :(得分:1)

如果未指定任何参数来接收输出,则仅打印最后一行。来自exec()手册:

  

如果输出参数存在,那么指定的数组将是   填充了命令的每一行输出。尾随   空格,例如\ n,不包含在此数组中。请注意,如果   数组已经包含一些元素,exec()会附加到   数组的结尾。如果您不希望该函数追加元素,   在将数组传递给exec()之前调用数组上的unset()。

您可以传递数组以接收所有行:

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