2017-04-09 10 views
0

Makefileで匿名のFIFOを使用することはできますか?Makefileで匿名のFIFOを使用するには?

私はそれを次のように試してみました:

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

を私は/bin/shから構文エラーを取得します。

  1. メイクファイルで匿名のFIFOを使用するにはどうすればよいですか?
  2. pandocの単純な正規表現(または単純な検索と置き換え)フィルタを使用するより良いソリューションはありますか?このmake
+0

私はメイクファイルについて十分に知りません、 '<()'はプロセス置換構文であり、POSIXでは指定されておらず、すべてのシェルでは実装されていません。 – Fred

+0

シェルスクリプトでは、FIFO( 'mkfifo')を作成し、これを' exec'を使ってファイル記述子に関連づけてから、ファイルを削除することができます。 FIFOはファイル記述子に関連付けられたままであり、ファイルシステム内の参照がなくても使用できます。私はあなたがmakefileからそれを行うことができるかどうかわかりません。 – Fred

+1

Makefileは一般的に '/ bin/sh'を使いますが、プロセスの置き換えを理解していません。しかし 'pandoc'はコマンドラインでファイル名を必要としません。ファイル名が指定されていなければstdinからの入力を受けますので、代わりにプレーンパイプを使うことができます: 'sed 's%•%*%'" $ <"| pandoc -o "$ @" ' – ottomeister

答えて

2

は、コマンドを実行するために/bin/sh使用し、/bin/sh<(...)プロセス置換構文を理解していません。

幸いにも、pandocはコマンドラインでファイル名を必要としません。何のファイル名が指定されていない場合は、pandocは、標準入力ストリームから読み込むので、あなたはこのように、通常のパイプを通してそれをsedコマンドの出力を供給することができるはずです。

sed 's%•%*%' "$<" | pandoc -o "[email protected]" 
関連する問題