以下から複数のファイルをダウンロードしました。買い戻しより多くのファイルがあります。各ファイルのmd5sum情報は、.md5sumという単一のファイルに保存されますMD5SUMS
。
ファイルの整合性を確認するために、md5sum -c MD5SUMS
ファイル内のすべてのファイルに対して長い出力を生成しましたMD5SUMS
。ファイルが見つからない場合(ダウンロードしない)、文句を言い、ファイルが見つかり、md5sum情報が一致した場合は「ok」と言いました。
md5sum: gencode.v27.tRNAs.gtf.gz: No such file or directory
gencode.v27.tRNAs.gtf.gz: FAILED open or read
md5sum: GRCh38.p10.genome.fa.gz: No such file or directory
GRCh38.p10.genome.fa.gz: FAILED open or read
GRCh38.primary_assembly.genome.fa.gz: OK
md5sum: _README.TXT: No such file or directory
_README.TXT: FAILED open or read
grep
「異常な」行をフィルタリングするためにパイプで接続しましたが、それでも出力全体を得ますmd5sum -c MD5SUMS | grep OK
。非常に長い出力を得る。存在しないファイルの場合は、「該当するファイルまたはディレクトリなし」のある行と「正常」のある行です。 「md5sum 構文に一致するファイルは赤で強調表示されます。
md5sum: gencode.v27.polyAs.gff3.gz: No such file or directory
md5sum: gencode.v27.polyAs.gtf.gz: No such file or directory
gencode.v27.primary_assembly.annotation.gff3.gz: OK
md5sum: gencode.v27.transcripts.fa.gz: No such file or directory
md5sum: gencode.v27.primary_assembly.annotation.gtf.gz: OK
ただし、中間ファイルを使用して出力を保存し、md5sum
そのgrep
ファイルを保存すると、期待どおりに「OK」というフレーズを含む行が表示されます。
md5sum -c MD5SUMS > test
grep "OK" test
gencode.v27.primary_assembly.annotation.gff3.gz: OK
gencode.v27.primary_assembly.annotation.gtf.gz: OK
GRCh38.primary_assembly.genome.fa.gz: OK
問題を理解できません。パイプラインで何が問題なのか、それとも予想される動作かを把握するのに役立ちますか?
答え1
md5sum
欠落しているファイルによって生成されたエラーメッセージが表示されます。これらのメッセージは常に標準エラーストリームであるため、標準エラーストリームから生成されます。出力ストリームはパイプを介して渡され、エラーメッセージはgrep
コマンドの影響を受けません。
まったく表示されないようにリダイレクトするには、次のようにします。
md5sum -c MD5SUMS 2>/dev/null | grep OK
エラーをログファイルに保存するには(たとえば、後で見つからないファイルを確認するために)、エラーを記録したい/dev/null
ファイル名に置き換えます。
ビットの説明2>/dev/null
:
コマンドは、2つの別々のストリームの出力を生成します。標準出力ストリームそして標準エラーストリーム。常に「ファイル記述子」1と2に割り当てられます。
標準出力ストリームは、コマンドの「標準出力」が移動する場所で、例のように他のコマンドにパイプすることができますgrep
。
標準エラーストリームは、「診断メッセージ」(通常「エラー」を意味します)がある場所です。いいえ通常、端末に直接別のコマンドをパイプします。これが、grep
コマンドがエラーメッセージをフィルタリングできないように見える理由です。実際にエラーメッセージを見ることもできません。
2>
生成されたすべての項目が端末に到達しないように、標準エラーストリームを別の場所にリダイレクトします。
標準出力ストリームをリダイレクトするのと同じものであり1>
、縮小して使用できます>
。
この/dev/null
ファイルは特別です。そこに書かれたすべては完全に消えます。
コマンドの後に使用すると、すべてのエラーメッセージが端末の代わりにリダイレクトされ2>/dev/null
削除されることを意味します。/dev/null