Bash

Latexmk,來自 Makefile,來自 bash 腳本,來自 Cron - Latexmk 未執行

  • October 3, 2015

我有幾個帶有 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.logSHELL=/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

根據https://unix.stackexchange.com/a/27291/37050

引用自:https://unix.stackexchange.com/questions/233673