POSIX shell中等效于<()的内容

14

<(commands ...) 在bash/zsh中将输出的行为变成文件。是否存在POSIX等效命令?


4
POSIX 没有规定进程替换,但您可以使用命名管道来完成相同的操作。 - bishop
2
@P.P.,就那个可能的副本而言,我并不是特别喜欢它,因为它包含了一些误解(其中之一是 bash 3.x *不支持进程替换;这是一个 msys 的限制,而不是基于版本的限制)。 - Charles Duffy
1个回答

14
mkfifo foo.fifo

## if your "commands" is multiple commands
# { commands ...; } >foo.fifo &

# otherwise, if it's just one
commands ... >foo.fifo &

something_else foo.fifo

是最接近的可用等价物

something_else <( commands ... )

可能的“健壮性”改进是使用类似于mktemp的东西来生成一个或多个管道的目录,以免发生冲突(或者只是生成用于管道的名称,因为mkfifo是原子的)等。实际上,这就是<( ... )在幕后所做的全部:它只是更健壮的答案的语法糖。 - mtraceur
3
在无法使用/dev/fd的平台上,<( ... )做了后台操作; 它在其中使用了pipe(2)匿名描述符对。 - Charles Duffy
好的。谢谢您的纠正 - 我完全忘记了这件事。 - mtraceur
2
没有 POSIX 的方法可以做到这一点,因为 POSIX 没有定义 mktemp。要么需要使用仅限于 POSIX shell 行为的重新实现 mktemp,要么就必须想出某种 hack 方法。 - Mikko Rantalainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接