下面是我試圖執行的代碼。我在代碼中提到了第 266 行。我添加了該代碼以洗掉日志檔案中的空白行。我不確定我們是否可以perl在 Perl 腳本中運行該命令。有沒有另一種方法可以運行它,以便我可以洗掉日志檔案中的空白行?
以下是我在運行 Perl 腳本時遇到的錯誤:
syntax error at ./reportJBossErrors.pl line 266, near "n -e "
Execution of ./reportJBossErrors.pl aborted due to compilation errors.
這是代碼的一部分,顯示了第 266 行:
sub main {
readConfiguration($config_file);
$short_hostname = `hostname | cut -f 1 -d.`;
chomp $short_hostname;
getFileandInstance($short_hostname);
$yesterday = getYesterday();
validateEnvironment();
$log_file = getLogFile($FMASK,$yesterday);
perl -i -n -e "print if /\S/" $log_file; # 266 line. This is where I'm getting the compilation error
processFile($log_file);
$html_out = writeEmail();
sendEmail($CONFIG{"FROMADDR"},$CONFIG{"TOADDR"},"Normal",
"JBOSS",$short_hostname,$log_file,$CONFIG{ENVTYPE},$html_out);
}
uj5u.com熱心網友回復:
您不能perl在 Perl 程式中呼叫命令,就像它是 Perl 內置函式一樣。您可以使用system來運行外部命令:
my $cmd = 'perl -i -n -e "print if /\S/"';
system "$cmd $log_file";
你需要小心參考。由于您在 Perl 變數中有一個$logfile要插入的檔案名/路徑,因此可以放在雙引號內。由于您不想插值\S,因此應該使用單引號。
uj5u.com熱心網友回復:
您不能像呼叫perlPerl 內置函式一樣呼叫Perl 程式中的可執行檔案。相反,使用system的串列形式來運行外部命令。不要忘記檢查命令是否成功:
my @cmd = (perl => '-i', '-n', '-e', 'print if /\S/', $log_file);
system(@cmd) == 0
or die "system @cmd failed: $?";
一般來說,我建議使用完整路徑perl而不是依賴$PATH.
另外,如果你需要跟蹤的狀態等,使用捕捉::微小兩全STDOUT和STDERR命令正在運行,這樣您就可以登錄錯誤資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/344831.html
標籤:perl
