我正在尝试将pdflatex作为来自Perl脚本的系统调用运行。
就像在Using system()中所说的那样,应该使用system("command", "arg1", "arg2", "arg3");
执行外部程序来直接运行它并避免打开子shell。当我这样做时
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 $?";
哪个有效。
How to concatenate strings with Perl概述了如何在Perl中连接。但它没有说明方法的差异。当我定义东西时,我通常会像my $var = "name_$othervar";
那样做,所以我甚至不使用大括号。
感谢任何解释。
答案 0 :(得分:5)
你回答了自己的问题。 “直接跑,避免打开
subshell“。>&
是一个shell语法,如果不是,则不解释
使用shell执行该命令。
第二种情况有效,因为这是传递单身时的行为
system()
的参数(打开一个shell)。顺便说一句,看看有什么
您链接到的页面说:
system()
接受标量或数组作为参数。如果是论点 是一个标量,system()
使用shell来执行命令(/bin/sh -c command
);如果参数是一个数组,它会直接执行命令,