2010-08-10 28 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