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
}