Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP脚本exec bash脚本不会打印所有bash行_Php_Bash_Exec - Fatal编程技术网

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

PHP脚本exec bash脚本不会打印所有bash行,php,bash,exec,Php,Bash,Exec,我的redhat上有php脚本,我通过telnet客户端以root用户身份登录。 运行bash脚本的PHP脚本是(functions.inc): 当我这样做的时候:php functions.inc-我得到以下信息: 发生什么事了[root@Xilantest]# 为什么我看不到第一行? 谢谢 在php脚本中尝试 echo system('/ilantest/testscript.sh'); 看 命令结果的最后一行。如果您需要执行 命令,并将命令中的所有数据直接传回 在没有任何干扰的情况下,使

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

当我这样做的时候:php functions.inc-我得到以下信息:
发生什么事了[root@Xilantest]#

为什么我看不到第一行?

谢谢

在php脚本中尝试

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

命令结果的最后一行。如果您需要执行 命令,并将命令中的所有数据直接传回 在没有任何干扰的情况下,使用passthru()函数。得到 执行命令的输出,确保设置并使用输出 参数

因此:


如果不指定任何参数来接收输出,则只打印最后一行。从手册:

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

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

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


在第一个echo语句之后,“e”在做什么?对不起,没有“e”修复Q..+当i./testscript.sh正常工作并打印2行时,这可能是原件的副本,可能另一行是原件的副本:)或者更好地使用另一个函数,该函数始终返回输出。@gaRex,当然OP希望检查脚本的返回值,并确保$output在执行内爆()之前不为空,但这一切都取决于OP如何编写shell脚本。那么使用proc_*函数堆栈可能更好。这是错误的。“输出”是每行的数组,而不是字符串。@kainjow ok…。因此使用
内爆()
将数组转换为字符串。我不明白您试图反驳的是什么。请用带(!)的所有字符串确定,但重复最后一个。。。使用
shell\u exec()
代替系统,不会产生副作用。
echo system('/ilantest/testscript.sh');
exec('/ilantest/testscript.sh', $output);
echo implode("\n", $output);
<?php
$lines = array();
exec('/ilantest/testscript.sh', $lines);
foreach($lines as $i) {
    echo $i;
}
?>