在 Makefile 中用 STDIN 替换一行

che*_*rtz 5 bash make sed awk

一个 Makefile 目标应该负责:

  • 抓取$ perl Markdown.pl src/index.md(markdown to html)的输出
  • 使用该字符串替换一行,类似于CONTENT源自文件 src/template.html 的内容。template.html 中没有与该行对应的其他行。

实现这一目标的优雅方式是什么?

Kev*_*vin 3

就像 arcege 所说,不要修改实际的源文件。无论如何,使用以下命令会更容易awk

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

如果您想让该行看起来更简洁,您可以将该 awk 代码放入脚本中。(如果这样做,请更改$$0$0,这是必要的,因为否则 makefile 会解释它)

target:
    awk -f convert.awk src/template.html > build/template.html
Run Code Online (Sandbox Code Playgroud)