使用 ZSH,我试图将 sed 命令包装到一个函数中,然后使用它,同时将管道与进程替代混合。让我用一个例子来解释:
$ echo "test text" | gzip > myfile.gz
$ sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g' <(zcat myfile.gz) | more
test text
$ ncat() { sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g' $@; }
$ zcat myfile.gz | ncat | more
test text
$ ncat <(zcat myfile.gz) | more
sed: can't read /proc/self/fd/13: No such file or directory
如您所见,在这 3 种用法中的 2 种中有效。最后一个是这里让我感兴趣的一个。(请注意,所有命令都适用于 bash)
你能解释为什么在输入中使用进程替换的函数的输出不能通过管道使用吗?
我不是在寻找一种解决方法来使我的示例正常工作。我正在寻找解释,因为我找不到。
仅供参考sed
,这里不相关,我尝试了多个其他命令(echo,cat ...),并得到了相同的结果