2012-01-02 90 views
2

我有一個shell腳本來生成兩種類型的報告。每個報告都是通過執行Sweave腳本,然後從生成的tex文件中編譯PDF生成的。從shell命令定時退出

eval "R CMD Sweave Weekly.Rnw" 
eval "pdflatex Weekly.tex" 
eval "R CMD Sweave Daily.Rnw" 
eval "pdflatex Daily.tex" 

舉例來說,如果有執行時「R CMD Sweave Weekly.Rnw」錯誤,則退出,但仍然產生一個特文件(我已經檢查不能停止),並且這TEX文件將不編譯在pdflatex中正確,即'pdflatex Weekly.tex'命令會掛起,shell腳本不會移動到下一個'R CMD Sweave Daily.Rnw'。

現在,我的問題: 如果我知道某個shell命令不應該花費更多的30秒,是否有一種方法可以在幾分鐘之後(或者某些情況下)導致從該命令(假定掛起)任意時間流逝)?或者,在編譯tex文件時遇到錯誤,是否有強制關閉乳膠引擎的方法?

感謝。

+3

你爲什麼使用'eval'?正如bash faq說的那樣*「eval是邪惡的拼寫錯誤,如果答案是eval,那麼你問的是錯誤的問題」* – SiegeX 2012-01-02 07:14:51

+0

有些情況下'eval'是合適的;很明顯這是其中之一。 – 2012-01-02 07:26:32

+1

[命令行命令在一段時間後自動殺死命令]的可能的重複(http://stackoverflow.com/questions/601543/command-line-command-to-auto-kill-a-command-在一定的時間內) – 2012-01-02 07:29:50

回答

3

使用pdflatex -halt-on-error停止pdflatex提問。

+1

您的意思是'pdflatex -interaction = batchmode'。 'pdflatex -halt-on-error'讓pdflatex在第一個錯誤時退出。 – 2012-01-02 20:12:40

+0

是的,但那是關鍵......如果您知道該文件已損壞,爲什麼還要生成更多錯誤?批處理模式有其他含義,所以它可能會或可能不會是你想要的。 – 2012-01-02 20:33:53

+1

'pdflatex -interaction = nonstopmode'似乎效果最好,因爲它有助於跳過所有用戶交互,這通常是與錯誤相關的交互。 – Arjun 2012-01-02 22:35:01

2

請參閱R.utils::evalWithTimeoutsetTimeLimit - 這些可以中斷命令,shell或其他方式,我相信,當達到超時並且只要該命令可以被用戶中斷。

0

或者,如果pdflatex正在從R CMD check叫的,你不知道如何傳遞參數給pdflatex,而你使用的是Windows,那麼另一種方法是:

  • 開始 - >程序 - > MIKTEX 2.9->維護(管理) - >設置(管理員)

然後:

  • 點擊種刷新FNDB
  • 點擊更新格式
  • 變化安裝缺少的包上即時沒有

這應該可以解決將R CMD檢查似乎掛在錯誤「檢查重新構建的小插曲PDF文件...」或「檢查PDF手冊的版本...」問題。