我有几个包含 LaTeX 文件的 Git 存储库,我想自动排版这些文件。这个想法是有一个中央 bash 脚本(由 cronjob 运行),在每个存储库中执行 bash 脚本,该脚本 (1) 提取新的提交并 (2) 执行make all
,这应该调用latexmk
更改的 LaTeX 文件。
中央 bash 脚本仅包含以下行:
bash ./repos/repo-xyx/cron.sh
然后repos/repo-xyz/cron.sh
是这样的:
cd "$(dirname "$0")"
git pull
make all
cd -
并在同一目录下的 Makefile 中:
all: $(subst .tex,.pdf,$(wildcard *.tex))
%.pdf: %.tex
latexmk -pdf -pdflatex="pdflatex -shell-escape" $< </dev/null
在我的用户的 crontab 中,我有* * * * * bash .../cron.sh 2>&1 > .../cron.log
和SHELL=/bin/bash
。
当 cronjob 执行时,我在日志中读到以下内容:
Already up-to-date.
latexmk -pdf -pdflatex="pdflatex -shell-escape" myfile.tex </dev/null
.../ (this comes from the line "cd -")
如您所见,latexmk
已调用但不执行任何操作。myfile.pdf
没有生成。
当我bash cron.sh
从最高目录运行(作为同一用户)时,这做工作。
当从 cron 作业运行的 bash 脚本运行时,什么可能导致 Makefile 不执行命令(至少,我认为 make 不执行此命令)?
这是 上的 GNU Make 3.81 Linux ubuntu 3.13.0-51-generic #84-Ubuntu SMP Wed Apr 15 12:08:34 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
。
答案1
问题原来是pdflatex
我的$HOME/.profile
.因此我将 cronjob 更改为:
* * * * * . $HOME/.profile; bash .../cron.sh 2>&1 > .../cron.log