2017-04-09 72 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]"