2

我的 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]#

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

4

3 回答 3

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);
于 2012-12-30T16:58:31.937 回答
1

在你的 php 脚本中尝试

echo system('/ilantest/testscript.sh');
于 2012-12-30T16:56:36.100 回答
1

如果您没有指定任何参数来接收输出,则只会打印最后一行。从exec()手册:

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

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

<?php
$lines = array();
exec('/ilantest/testscript.sh', $lines);
foreach($lines as $i) {
    echo $i;
}
?>
于 2012-12-30T17:04:32.997 回答