7

这很简单,我没有想法。我确信有一个快速的解决方法。

exec('echo 123 &> /var/log/123.log');

我确定这与权限无关,因为文件 123.log 已创建,但它只是空的。我也尝试过 shell_exec,但它根本不创建文件。还尝试了所有重定向变体,即1> 2> >.

使用 PHP 捕获输出不是选项,因为生产中的输出很大,我不想遇到内存问题。

任何想法表示赞赏。

顺便说一句,我使用的是 Ubuntu 12.04 LAMP。

4

3 回答 3

2

Debian 和基于 Debian 的 Linux 发行版(如 Ubuntu)现在使用 dash 而不是 bash 作为 /bin/sh。

&>是一个 bash 扩展,破折号不知道。

正确的 posix 兼容的写法cmd &> filecmd > file 2>&1

cmd > file 2>&1适用于所有 posix 兼容的 shell:dash、bash、ksh、zsh、ash ...

因此,您需要将代码更改为:

exec('echo 123 > /var/log/123.log 2>&1');
于 2017-03-15T18:20:54.843 回答
0

尝试不带 & 的 shell_exec:

echo shell_exec("echo 123 > /var/log/123.log");
于 2013-04-18T08:33:55.343 回答
0

唯一有用的是创建一个具有 exec 权限的 shell 脚本,例如 test.sh:

#!/bin/bash
echo 123 &>> /var/log/123.log

并像这样执行它:

shell_exec('[full path to]/test.sh');

因此,重定向运算符并不重要,但其他一切都是(#!指令,shell_exec)。

于 2013-04-18T09:53:11.240 回答