質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

TeX

フリーの組版システムで、字や図版などの要素を紙面に配置するという作業をコンピュータで行います

Q&A

解決済

2回答

2717閲覧

AppleScriptのdo shell scriptでPerlを実行した際の動作について

退会済みユーザー

退会済みユーザー

総合スコア0

AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

TeX

フリーの組版システムで、字や図版などの要素を紙面に配置するという作業をコンピュータで行います

0グッド

0クリップ

投稿2016/05/17 16:13

編集2016/05/18 00:10

TEXファイルをplatexでコンパイル、dvipdfmxでpdfに変換、openする過程をドラッグアンドドロップで自動でやってくれる.appを作ろうと思っているのですが、do shell script でPerlプログラムを実行した際にこけてしまいます。
###AppleScript(main.scpt)

Applescript

1on open DropFile 2 set thePath to POSIX path of (path to current application) 3 set aCMD to "perl " & thePath & "Contents/Resources/Code/tex.pl " & POSIX path of DropFile 4 display dialog aCMD 5 do shell script aCMD 6 display dialog result 7end open

###Perlファイル(tex.pl)

perl

1use strict; 2use warnings; 3use utf8; 4 5my $FilePath = $ARGV[0]; 6my $DirPath = `dirname $ARGV[0]`; 7my $FileName = `basename $FilePath .tex`; 8my $EndCode = 1; 9 10chomp($FileName); 11chomp($DirPath); 12my $PlatexResult = system("cd $DirPath ; /usr/texbin/platex -interaction=batchmode $DirPath/$FileName.tex"); 13if ($PlatexResult != 0){ 14 $EndCode = 2; 15 goto end; 16} 17my $DvipdfmxResult = system("cd $DirPath ; /usr/texbin/dvipdfmx $DirPath/$FileName.dvi"); 18if ($DvipdfmxResult != 0){ 19 $EndCode = 3; 20 goto end; 21} 22my $OpenPngResult = system("cd $DirPath ; /usr/bin/open $DirPath/$FileName.pdf"); 23if ($OpenPngResult != 0){ 24 $EndCode = 4; 25 goto end; 26} 27 28end: 29 30system("clear"); 31sleep 1; 32print "$EndCode\n";

###結果(ダイアログ)

3

結果から、dvipdfmxの処理でエラーになっているようなのですが、ターミナルで/bin/shをし、tex.plにmain.scptが渡すコマンド(aCMD)を入力してみると結果(print)は1となっていて通っています。do shell scriptは特別な書き方があるのでしょうか。原因のわかる方回答お願い致します。

###補足情報
OSX 10.10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

よく調べていくと、dvipdfmxの中で/usr/local/bin/rungsが動いていることがわかりました。
しかし、/usr/local/texlive/2014/texmf-config/dvipdfmx/dvipdfmx.cfgではrungsとしか書かれていないために、doshellscriptの特性上 コマンドを参照することができなかった というのが原因でした。
dvipdfmx.cfgをrungsのところだけフルパスに書き換えたファイルと交換してやることで正常に動きました。

投稿2016/05/18 13:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ターミナルでの実行はOKだけど、スクリプトでは失敗する。
といった場合、環境変数の設定有無が原因となることが
多いような気がしますね~
この場合はパスが通ってないくさい?
以下のコードを追加したら確認できるかな

Perl

1@list = `which platex`; 2print @list;

投稿2016/05/17 23:02

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/05/18 00:06

回答ありがとうございます。回答を参考にして、platexコマンドをフルパス(/usr/texbin/platex)で実行したところplatexコマンドはうまく処理されました。しかし、今度はdvipdfmxやopenもフルパスで指定したのですがどちらもこけてしまいました。いろいろとやってみましたが原因不明です。原因がわかりましたら回答お願いいたします。
takasima20

2016/05/18 01:05

例えば、パス以外に必要な環境変数の設定はないんですかね。 env コマンドで確認してみては?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問