是否可以在 msys /mingw 上模拟进程替换(使用 bash 3.x)

Posted

技术标签:

【中文标题】是否可以在 msys /mingw 上模拟进程替换(使用 bash 3.x)【英文标题】:Is it possible to mimic process substitution on msys /mingw (with bash 3.x) 【发布时间】:2014-01-01 08:23:34 【问题描述】:

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

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

在 mingw32/msys 上(来自 http://www.mingw.org/,截至 2013 年 12 月),并得到:

sh: syntax error near unexpected token `('

在 Ubuntu 12.04 上运行相同的东西返回:

1c1
< a
---
> b

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

谢谢。

【问题讨论】:

【参考方案1】:

我想在 bash 3.x 中进行进程替换。语法是正确的。它由 bash shell 支持。因此,我建议检查您正在运行的 shell 并执行类似的操作:

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

进程替换不是 POSIX 兼容的功能。要启用尝试运行:

set +o posix

另请参阅this 了解更多信息。

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

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

请参阅使用Named Pipes

【讨论】:

我得到:$ /bin/bash diff uname -a: MINGW32_NT-5.2 DOCTOR 1.0.18(0.48/3/2) 2012-11-21 22:34 i686 Msys 我安装了msys。它仍然不支持进程替换。见旧post。尝试改用命名管道。我的第二个示例运行良好。 谢谢。第二个命令似乎工作正常。介意解释一下这条线吗?一个小问题是输入似乎挂起,我需要按 Enter 键才能返回 bash 提示符 $。

以上是关于是否可以在 msys /mingw 上模拟进程替换(使用 bash 3.x)的主要内容,如果未能解决你的问题,请参考以下文章

在 MSYS2/MinGW 中执行脚本

既然我有 msys2,我可以删除以前在 mingw 上安装的实例吗?

我在windows下安装了MinGW和msys,并在桌面上有了mingw shell的图标,请问我怎么才能应用vim来写程序呢

在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw

使用 MSYS2/MINGW-64 缺少 POSIX 和 std 符号

在 msysgit 中运行 MinGW/MSYS 工具