2012-01-02 8 views
2

私は2種類のレポートを生成するシェルスクリプトを持っています。各レポートは、Sweaveスクリプトを実行してから、結果のtexファイルからPDFをコンパイルすることによって生成されます。例えばシェルコマンドからの時間切れ終了

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ファイルを生成し、このTEXファイルがコンパイルされないでしょう'pdflatex Weekly.tex'コマンドがハングし、シェルスクリプトが次の 'R CMD Sweave Daily.Rnw'に移動しません。

今、私の質問:特定のシェルコマンドが30秒以上かかるべきでないことが分かっている場合、そのコマンドからのタイムアウトを誘発する方法がありますか(数分後に)任意の時間経過)?別の方法として、texファイルをコンパイルするときにエラーが発生した後にラテックスエンジンを強制的にシャットダウンする方法はありますか?

ありがとうございました。

+3

なぜあなたは 'eval'を使用していますか? bash faqが言っているように* "evalは悪のスペルミスです。答えがevalなら間違った質問をしています" * – SiegeX

+0

'eval'が適切なコンテキストがあります。これが彼らの1つであることははっきりしていません。 –

+1

[コマンドラインコマンドの重複可能性のある一定時間後にコマンドを自動殺す](http://stackoverflow.com/questions/601543/command-line-command-to-auto-kill-a-command-時間の後に) –

答えて

3

pdflatex -halt-on-errorを使用してpdflatexを停止してください。

+1

あなたは 'pdflatex -interaction = batchmode'を意味します。 'pdflatex -halt-on-error'は、最初のエラーでpdflatexを終了させます。 –

+0

はい、それがポイントでした...なぜファイルが壊れていることが分かっていれば、より多くのエラーを生成するでしょうか?バッチモードには他にも意味があるので、あなたが望むものかもしれません。 –

+1

'' pdflatex -interaction = nonstopmode'は、通常はエラー関連の対話であるすべてのユーザーの対話を飛び越えるのに役立ちます。 – Arjun

2

R.utils::evalWithTimeoutまたはsetTimeLimitを参照してください。これらは、シェルや他のコマンドを中断する可能性があります。タイムアウトに達したとき、そしてコマンドがユーザーによって中断されている間は、

0

それとも、それにpdflatexはR CMD checkから呼び出されている、とあなたはpdflatexをに引数を渡す方法がわからない、とWindowsを使用している場合は、代替がある:

  • [スタート]> [プログラム] - > MikTex 2.9->メンテナンス(管理) - >設定(管理者)、その後

と:

  • クリックの更新FNDB
  • クリック更新フォーマット
  • 変更これはR CMDチェックが上エラーがハングアップしたように見える修正する必要がありますに何

オンザフライ不足しているパッケージをインストールしていません"ビネットPDFの再構築をチェックしています..."または "マニュアルのPDFバージョンを確認しています..."という問題があります。

関連する問題