2

Perl スクリプトからシステム コールとして pdflatex を実行しようとしています。system()の使用で述べたように、外部プログラムsystem("command", "arg1", "arg2", "arg3");を実行して直接実行し、サブシェルを開かないようにする必要があります。私がそうするとき

system("pdflatex", "LaTexFile", ">& stdout.txt") == 0 or die "pdflatex failed with exit code $?";

stdout.txt出力は端末 (STDOUT) に出力される代わりに、に書き込まれません。だから私は試しました

system("pdflatex " . "LaTexFile " . ">& stdout.txt") == 0 or die "pdflatex failed with exit code $?";

動作します。

Perl で文字列を連結する方法は、Perl で連結する方法の概要を示しています。しかし、方法の違いについては述べていません。ものを定義するときは、通常は好きなmy $var = "name_$othervar";ように定義するので、中かっこも使用しません。

どんな説明でも大歓迎です。

4

1 に答える 1

5

あなたはあなた自身の質問に答えました。 「直接実行し、サブシェルを開かないようにする」 . これ>&は、コマンドの実行にシェルを使用していない場合は解釈されないシェル構文です。

system()2 番目のケースは、 (シェルを開く)に単一の引数を渡すときの動作であるため、機能します。ちなみに、あなたがリンクしたページの内容を見てください:

system()引数としてスカラーまたは配列のいずれかを受け入れます。引数がスカラーの場合、system()シェルを使用してコマンド ( /bin/sh -c command) を実行します。引数が配列の場合、コマンドを直接実行します。

于 2013-08-07T14:09:37.870 に答える