/ /シェルコマンドが実行されなかったか出力が生成されなかったかどうかを判断する方法-perl、shell、unix

シェルコマンドが実行されなかったか、出力が生成されなかったかを調べる方法 - perl、shell、unix

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

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

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

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

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

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

回答:

回答№1は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」が含まれていると仮定します。


回答№2の場合は1

つかいます $? コマンドが正常に実行されたかどうかを確認するには:を参照してください backticksはperlに値を返しません 例として挙げられる。


回答№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
}