Bash

在 Makefile 中用 STDIN 替換一行

  • January 30, 2012

一個 Makefile 目標應該負責:

  • 抓取$ perl Markdown.pl src/index.md(markdown to html)的輸出
  • 使用該字元串替換一行,例如CONTENT源自文件 src/template.html。在 template.html 中該行沒有其他行。

實現這一目標的優雅方法是什麼?

就像 arcege 所說,不要修改實際的源文件。無論如何,這更容易awk

target:
   awk '{if($$0=="CONTENT"){system("perl Markdown.pl src/index.md")}else{print}}' src/template.html > build/template.html

如果您想讓該行看起來更清晰,您可以將該 awk 程式碼放入腳本中。(如果你這樣做,更改$$0$0,這是必要的,否則makefile會解釋它)

target:
   awk -f convert.awk src/template.html > build/template.html

一條規則是您不要建構中修改文件,因此不要就地修改。使用“建構”目錄或類似的東西。

template_markdown:
   @mkdir -p build
   cp -p src/template.html build
   (echo /CONTENT/c; perl Markdown.pl src/index.md; echo .; echo w) | ed - build/template.html

這應該處理任何perl Markdown.pl不發出句點(’.’)的情況。

引用自:https://unix.stackexchange.com/questions/30332