在msys/mingw(使用Bash 3.x)上模仿进程替换是否可能?

4

我正在尝试使用进程替换来避免使用临时文件。 我尝试了以下内容:

diff <(echo "a") <(echo "b")

在mingw32/msys(截至2013年12月从http://www.mingw.org/获取)中,遇到了以下问题:

sh: syntax error near unexpected token `('

在Ubuntu 12.04上运行相同的内容会返回以下结果:
1c1
< a
---
> b

我使用的msys可能有bash 3.1版本。我想知道是否有可能解决这个问题,以便可以在msys /旧版bash中完成相同的工作,而不使用临时文件。

谢谢。

1个回答

4

我成功地在Bash 3.x中进行了进程替换。语法是正确的,也被Bash shell支持。因此,我建议您检查一下您正在运行的shell,并执行类似以下命令:

/bin/bash diff <(echo "a") <(echo "b")

进程替换不符合POSIX标准。若要启用,请尝试运行:

set +o posix

另一种方法是使用命名管道。我在GNU bash版本4.1.2(1)上进行了测试:

另请参阅此处获取更多信息。

diff - p <<< "test" & echo "test2" > p

请参阅有关命名管道的内容。


我得到的结果是:$ /bin/bash diff <(echo "a") <(echo "b") sh: 语法错误,附近有一个意外的符号 `(' - thor
uname -a:MINGW32_NT-5.2 DOCTOR 1.0.18(0.48/3/2)2012-11-21 22:34 i686 Msys - thor
1
我安装了msys。它仍然不支持进程替换。请参考旧文章(https://dev59.com/am865IYBdhLWcg3wHKte)。尝试改用命名管道。我的第二个示例可以正常工作。 - idobr
谢谢。第二个命令似乎工作正常。能否稍微解释一下这行代码?一个小问题是输入似乎会卡住,我需要按回车键才能回到bash提示符$。 - thor

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