Bash
Latexmk,來自 Makefile,來自 bash 腳本,來自 Cron - Latexmk 未執行
我有幾個帶有 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
.
問題原來
pdflatex
是在我的$HOME/.profile
. 因此,我將 cronjob 更改為:* * * * * . $HOME/.profile; bash .../cron.sh 2>&1 > .../cron.log