Php shell_exec语法错误。直接在终端上运行是可以的

Php shell_exec语法错误。直接在终端上运行是可以的,php,bash,Php,Bash,拥有此命令: $command = "diff -bBdH --ignore-all-space <(echo 'hi') <(echo 'hi1')"; echo $command; $result = shell_exec($command); $command=“diff-bBdH--忽略所有空格您是否尝试过引用变量并在回显字符串周围加引号 $command = "diff -bBdH --ignore-all-space <(echo '" .

拥有此命令:

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

$command=“diff-bBdH--忽略所有空格您是否尝试过引用变量并在回显字符串周围加引号

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

$command=“diff-bBdH——忽略所有空格您的语法对于Bash很好,但是对于
sh
无效。在Bash中显式运行它,或者将Bashisms转换为经典的bourneshell(有些挑战,可能需要一个临时文件)

我不知道PHP是否提供了一种方法来指定在
shell\u exec
中使用哪个shell,但您至少可以让
sh
运行
bash
。不过,嵌套引用有点棘手

shell_exec("bash -c 'diff -bBdH --ignore-all-space <(echo \"hi\") <(echo \"hi1\")'");

shell\u exec("bash-c'diff-bBdH——忽略所有空格Nope,但根据PHP的替换原则,这应该没有任何效果。我会尝试并报告。正如预期的那样,绝对没有影响。我甚至会假设它在shell到达替换字符串之前就失败了。bash在到达第一个括号时解析失败。如果你rdcode一些文本,而不是$str1和$str2;因此,如果您使用
diff-bBdH——如果我在
bash/zsh
中运行它,请忽略所有空格——是的。如果我在
shell_exec
中运行此命令,将导致错误。很抱歉,我找不到任何错误。可能会有人出现,他对shell了解得更多,而不是简单的操作方法e.感谢;)
shell_exec("bash -c 'diff -bBdH --ignore-all-space <(echo \"hi\") <(echo \"hi1\")'");