与匿名管道一起使用的Diff在放入Makefile时会出现奇怪的错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与匿名管道一起使用的Diff在放入Makefile时会出现奇怪的错误相关的知识,希望对你有一定的参考价值。

我尝试使用匿名管道在Makefile中运行'diff'。比较从bash shell和Makefile启动'diff'时会发现不同的结果。有任何澄清吗?谢谢。

$ diff <(echo cat) <(echo dog)
1c1
< cat
---
> dog

$ make
diff <(echo cat) <(echo dog)
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `diff <(echo cat) <(echo dog)'
make: *** [test] Error 2

我的Makefile是

test:
        diff <(echo cat) <(echo dog)
答案

如错误消息所示,你的shell是sh而不是bash;所以你不能使用Bash语法功能。

一个常见的解决方法是设置SHELL=/bin/bash(或您的本地等效项),或者,当然,将您的代码重构为符合POSIX的shell脚本。

以上是关于与匿名管道一起使用的Diff在放入Makefile时会出现奇怪的错误的主要内容,如果未能解决你的问题,请参考以下文章

linux中有名管道与匿名管道的实现

linux中有名管道与匿名管道的实现

C# 创建匿名管道

将 gprof 与 makefile 一起使用

Win32 匿名管道在第一次读取后损坏

Linux_Centos进程间通信_管道(匿名管道_命名管道)