2013-08-07 21 views
2

我想從Perl腳本運行pdflatex作爲系統調用。 就像在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";,所以我甚至不使用大括號。

任何解釋讚賞。

+2

'「>&stdout.txt」'不是您的命令(pdflatex)的參數。它由執行環境/ shell解釋。 pdflatex不能使用它。 – marderh

+0

第一次調用'system'不是字符串連接的例子,而是一個參數列表。 – ThisSuitIsBlackNot

回答

5

你回答了你自己的問題。 「直接運行並避免打開 子shell」>&是一種shell語法,如果您不是 ,則使用shell執行該命令,但該語法不會被解釋。

第二種情況的工作,因爲這是通過一個單一的 參數時system()(打開外殼)的行爲。順便說一句,採取什麼 頁面鏈接到您說一下:

system()接受作爲參數,一個標量或數組。如果參數 是標量,則system()使用shell執行命令(/bin/sh -c command);如果參數是一個數組,它直接執行命令,