2017-04-09 36 views
0

是否可以在Makefile中使用匿名FIFO?如何在Makefile中使用anonymous fifo?

我尝试了以下方式:

%.html: %.txt 
     pandoc -o [email protected] <(sed 's%•%*%' $<) 

,但我从/bin/sh出现语法错误。

  1. 如何在Makefile中使用anonymous fifo?
  2. 是否有一个更好的解决方案使用简单的正则表达式(甚至简单的查找和替换)过滤器的潘多糖?
+0

我不知道有足够的了解makefile文件,但'<()'是一种进程替换语法,并且不是由POSIX指定的,并且不是由所有的shell实现的。 – Fred

+0

在shell脚本中,可以创建一个FIFO('mkfifo'),将其与文件描述符(使用'exec')关联,然后删除该文件。 FIFO将与文件描述符保持关联,即使文件系统中的引用消失,您也可以使用它。我不知道你是否可以通过makefile来做到这一点。 – Fred

+1

Makefile通常使用'/ bin/sh',它不理解进程替换。但'pandoc'在其命令行上不需要文件名。如果没有指定文件名,它会从stdin获取输入,所以您应该可以使用普通管道:'sed's%•%*%'“$ <”| pandoc -o“$ @”' – ottomeister

回答

2

make使用/bin/sh执行命令,并/bin/sh不理解<(...)过程替换语法。

幸运的是,pandoc在其命令行上不需要文件名。如果没有指定文件名,然后pandoc从标准输入流中读取,所以你应该能够通过普通管给它的sed命令的输出,这样的:

sed 's%•%*%' "$<" | pandoc -o "[email protected]"