shell_exec语法错误。在终端直接运行是好的

时间:2012-12-11 16:30:36

标签: php bash

有了这个命令:

    $command = "diff -bBdH --ignore-all-space <(echo 'hi') <(echo 'hi1')";
    echo $command;
    $result = shell_exec($command);

在屏幕上,我看到:

    sh: 1: Syntax error: "(" unexpected
    diff -bBdH --ignore-all-space <(echo 'hi') <(echo 'hi1')

如果我将第二行从控制台输出复制粘贴到终端,结果将是正确的。 (也在另一台机器上转载)。

我在这里找不到简单的东西,看不出它是什么。


此外,为什么我的输出反转?
我在执行它之前清楚地回应了命令, 因此shell的语法错误应该出现在shell_exec

之后

2 个答案:

答案 0 :(得分:2)

您的语法适用于Bash,但对sh无效。明确地在Bash中运行它,或者将Bashisms转换为经典的Bourne shell(有些挑战,可能需要临时文件)。

我不知道PHP是否提供了一种指定shell_exec中使用哪个shell的方法,但您至少可以shbash运行shell_exec("bash -c 'diff -bBdH --ignore-all-space <(echo \"hi\") <(echo \"hi1\")'"); 。但是,嵌套引用有点棘手。

{{1}}

标准输出和标准误之间的输出顺序是任意的;输出缓冲可能导致在常规打印之前打印错误消息,尽管它们以不同的顺序执行。在单个流中,您当然可以依赖有序输出。

答案 1 :(得分:0)

您是否尝试引用变量并在echo字符串周围加上引号?

$command = "diff -bBdH --ignore-all-space <(echo '" . $str1 ."') <(echo '" . $str2 . "')";
echo $command;

我认为引用变量总是好的做法。它使阅读变得容易,并有助于解决恼人的错误。