Bash
在 Makefile 中用 STDIN 替換一行
一個 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
不發出句點(’.’)的情況。