4

次のように、perl スクリプトを介していくつかのシェル コマンドを実行し、出力をキャプチャしています。

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

コマンドが正常に実行されたかどうかも確認します。

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

これは通常機能し、出力が正しく得られます。問題は、コマンド自体が出力を生成しない場合があることです。たとえば、目的のテキストgrepがターゲット ファイルに存在しない場合があるため、結果として出力が提供されません。この場合、私のスクリプトはこれを「コマンドが実行されていない」として検出しますが、そうではありません。

perlでこれら2つのケースを区別する正しい方法は何ですか?

4

3 に答える 3

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 に答える