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);
}
一切正常,从命令提示符下运行时,但运行相同命令的脚本总是崩溃。
什么是不同的做法,我该如何解决它?
(1)请发布确切的错误,你会得到。 (2)请打印并发布'$ rmcmd'的值 - 理想情况下,都是通过'print'和Perl调试器。 (3)正确的解决方案是将整个复杂管道重写为Perl代码。 – DVK 2010-08-10 20:34:42
(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
为什么你不用Perl做这一切?你使你的代码不能移植。 – ghostdog74 2010-08-11 01:05:53