php proc_open bash 命令中的文件描述符

php proc_open file descriptor in bash command

当我们在PHP中使用proc_open时:

<?php

$descriptors = array(
    array('pipe', 'r'),
    array('pipe', 'w'),
    array('pipe', 'w'),
);

$cmd = 'cat <(ls)';
//$cmd = 'ls';
echo $cmd . PHP_EOL;
$ph = proc_open($cmd, $descriptors, $pipes);
echo stream_get_contents($pipes[1]);
echo stream_get_contents($pipes[2]);
proc_close($ph);

当运行此脚本时,发生错误:

$ php test.php 
cat <(ls)
sh: 1: Syntax error: "(" unexpected

但是 运行 原始命令:

$ cat <(ls)
clusterRegions.php
composer.json
composer.lock
cvCells.php
kent
prepareForTF.php
README.txt
scoreRegions.php
test.php
tests
vendor

好像<()这个东西不能被proc_open识别。 那么如何将带有文件描述符的 bash 命令传递给 proc_open 呢?

@Etan Reisner,你是对的,当我改成bash时,它运行良好。

$cmd = 'bash -c "cat <(ls)"';