system ("dialog --menu Customize 10 70 50 "
. "'Flush rules' 'Clear all the rules' "
. "'Show rules' 'Shows the current rules' "
. "'more options' '........' 2> /tmp/tmp.txt ");
蕩,tadmc是快速。是的,請使用.
並置命令。
我會建議你在一個單獨的字符串中創建你的命令,然後執行它。我也推薦使用qq
命令來做引用。這樣,你就不必擔心單與雙引號:
my $command = qq(dialog --menu Customize 10 70 50)
. qq("Flush rules" 'Clear all the rules')
. qq('Show rules' 'Shows the current rules')
. qq'more options' '........' 2> /tmp/temp.$$);
my $error = system $command;
使用qq
可以讓你不用擔心我是否需要用雙引號允許變量替換或單引號,或有逃避報價。例如,我可以混合使用雙引號和單引號,並且可以使用Perl變量而不必擔心是否必須從單引號更改爲雙引號。例如,我使用/tmp/temp.$$
。 $$
是進程ID,因此如果執行兩次該命令,則會使用兩個不同的臨時文件。
通過爲我的命令創建一個單獨的變量,我現在可以稍後使用它 - 就像我的系統命令中有錯誤一樣。
順便說一句,您應該經常檢查您的system
命令的返回。如果由於某種原因無法執行系統命令,可能很有可能出現錯誤或至少注意到問題。
其中一個問題是系統命令的輸出與大多數Perl函數相反。在大多數Perl函數中,返回零表示失敗,而非零返回表示成功。但是,system
函數恰恰相反。零意味着成功,非零意味着失敗。
,可導致如果怪結構:
if (system $command) {
die qq(Can't execute command "$command"\n);
};
這就像我說的,如果我的系統命令執行成功,我死了,但它的真正含義與此相同:
my $error = system $command;
if ($error) {
die qq(Can't execute command "$command"\n);
}
從語法上講,這更有意義。
您是否試過「。」? (即句點爲字符串連接)? –
transistor1
糟糕!我忘了那個。謝謝:) –
總是樂於提供幫助,如果我可以! – transistor1