如何确定shell命令是否未运行或未生成输出

时间:2013-08-16 08:58:20

标签: perl shell unix

我正在通过perl脚本执行一些shell命令并捕获输出,就像这样,

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

我还检查命令是否成功运行,

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

这通常有效,我得到了正确的输出。问题是,在某些情况下,命令本身不会产生任何输出。例如,有时我试图grep的文本将不会出现在目标文件中,因此不会提供任何输出。在这种情况下,我的脚本检测到这是"命令没有运行",而它不是真的。

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

3 个答案:

答案 0 :(得分: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”,您只想从中获取数字。

答案 1 :(得分:1)

使用$?检查命令是否成功执行:有关示例,请参阅backticks do not return any value in perl

答案 2 :(得分:1)

如果您没有选择|grep,可以查看$?以了解更具体的退出状态,

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

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