我创建了一个 makefile 命令来使用 Pandoc 和通用预处理器 (GPP)来自动化发布工作流程。它如下:
TODAY = $(shell date +'%Y%m%d-%H%M')
MACROS = utils/gpp/macros.md
TEMPLATE = utils/template.docx
GPP = utils/gpp/gpp.exe
MACROS = utils/gpp/_macros.pp
METADATA = metadata.yaml
FM = content/frontmatter/*.md
MM = content/mainmatter/*.md
CONTENT = $(FM) $(MM)
default: docx
docx:
for file in $(CONTENT); do \
fifo=$$(mktemp -u); \
FIFOS+=("$$fifo"); \
cat $(MACROS) "$$file" | \
$(GPP) -DWORD -x -o "$$fifo" & \
done; \
pandoc metadata.yaml "$${FIFOS[@]}" -f markdown -t docx \
--citeproc --csl $(CSL) \
--reference-doc=$(TEMPLATE) \
--file-scope \
-o dist/$(TODAY).docx
它在 Windows 上的Git 终端上运行良好。然而,在我的 Ubuntu 24.04 系统上,我收到一个/bin/sh: 1: Syntax error: "(" unexpected
错误,它指向该行for file in $(CONTENT); do \
。我尝试了以下方法,但无济于事:
for file in ( $(CONTENT) ); do \
for file in "$(CONTENT)"; do \
为什么会发生这种情况?我该如何纠正?(是的,我知道 GPP 链接必须针对 Ubuntu 进行更新,但它甚至还没有到达那一行)
如果有人想在本地尝试,该存储库是公开的:https://github.com/khalid-hussain/editorial-project-template