2013-08-16 44 views
3

我通过一个perl脚本执行一些shell命令,并捕获输出,这样,如何确定是否shell命令不运行或不产生输出

$commandOutput = `cat /path/to/file | grep "some text"`; 

我还检查命令成功运行或不是这样,

if(!$commandOutput) 
{ 
    # command not run! 
} 
else 
{ 
    # further processing 
} 

这通常工作,我得到正确的输出。问题是,在某些情况下,命令本身不会产生任何输出。例如,有时候我想要输入grep的文本将不会出现在目标文件中,因此不会提供输出。在这种情况下,我的脚本将其检测为“command not run”,但它不是真的。

在perl中区分这两种情况的正确方法是什么?

+2

你不应该使用Perl来执行cat和grep。 perl可以做到这一点一样简单,快速,更安全 – Sibster

+0

的确,但也有很多其他的perl没有其他选择,所以我只是建立了一个通用系统来运行命令并获取输出,这些将由perl处理。 –

+0

@Sibster:grep在速度竞赛中轻松击败Perl。可能是2倍或更多。 –

回答

5

你可以用它来知道命令是否失败或命令任何回报

$val = `cat text.txt | grep -o '[0-9]*'`;  
print "command failed" if (!$?);  
print "empty string" if(! length($val));  
print "val = $val"; 

假定text.txt包含您只想从中获取数字的“123ab”。

+0

这解决了我所有的疑问,谢谢! –

+0

+1为好的答案 – Veer

1

如果你不输送至|grep,您可以检查$?更具体的退出状态,

my $commandOutput = `grep "some text" /path/to/file`; 

if ($? < 0) 
{ 
    # command not run! 
} 
elsif ($? >> 8 > 1) 
{ 
    # file not found 
} 
else 
{ 
    # further processing 
} 
相关问题