4

我正在通过 perl 脚本执行一些 shell 命令并捕获输出,如下所示,

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

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

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

这通常有效,我得到正确的输出。问题是,在某些情况下,命令本身不会产生任何输出。例如,有时我尝试的文本grep不会出现在目标文件中,因此不会提供任何输出。在这种情况下,我的脚本将其检测为“命令未运行”,但事实并非如此。

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

4

3 回答 3

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”。

于 2013-08-16T10:48:55.483 回答
2

用于$?检查命令是否成功执行:参见反引号在 perl 中不返回任何值的示例。

于 2013-08-16T09:02:01.503 回答
1

如果您不使用管道,|grep则可以检查$?更具体的退出状态,

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

if ($? < 0)
{
    # command not run!
}
elsif ($? >> 8 > 1)
{
   # file not found
}
else
{
    # further processing
}
于 2013-08-16T10:01:58.363 回答