2010-08-10 71 views
2

我想修改一個Perl腳本來註釋掉所有匹配某種模式的行。在正常的命令提示符,這裏是我想添加一行:Perl系統命令不作爲正常提示

grep -lIRZ --exclude="*\.svn*" "pattern" . | xargs -0 -l sed -i -e 's/.*pattern.*/\/\/&/g' 

這是在Perl腳本的環境:

my $rmcmd = "grep -lIRZ --exclude=\"*\\.svn*\" \"pattern\" . | xargs -0 -l sed -i -e 's/.*pattern.*/\\/\\/&/g'"; 
runcmd($rmcmd); 
... 
sub runcmd { 
    my @cmd = @_; 
    print "Running: @cmd\n"; 
    system(@cmd); 
    # Get status from system 
    my $ret = $? >> 8; 

    if ($ret) { 
     print "-E- command completed with error code $ret.\n"; 
     exit(1); 
    } 
    return ($ret); 
} 

一切正常,從命令提示符下運行時,但運行相同命令的腳本總是崩潰。

什麼是不同的做法,我該如何解決它?

+3

(1)請發佈確切的錯誤,你會得到。 (2)請打印併發布'$ rmcmd'的值 - 理想情況下,都是通過'print'和Perl調試器。 (3)正確的解決方案是將整個複雜管道重寫爲Perl代碼。 – DVK 2010-08-10 20:34:42

+0

(1)確切的錯誤是:-E-命令以錯誤代碼1結束。
(2)打印函數返回:grep -lIRZ --exclude =「* \。svn *」「dlclose」。 | xargs -0 -l sed -i -e's /.* dlclose。*/\/\ /&/ g'
(3)我是perl的新手,runcmd已經在腳本中定義過了。用Perl代碼管道的正確方法是什麼?你能給我一些參考嗎? – user108088 2010-08-10 20:46:19

+1

爲什麼你不用Perl做這一切?你使你的代碼不能移植。 – ghostdog74 2010-08-11 01:05:53

回答

0

您的代碼適用於我 - 在Ubuntu上使用perl 5.10.1 - 在$ rmcmd = ..行的末尾重新插入缺少的分號。

+0

在Ubuntu上適用於我。 – szbalint 2010-08-10 21:06:07