このコマンドはどういう意味ですか? (IOリダイレクトの問題)[閉じる]

このコマンドはどういう意味ですか? (IOリダイレクトの問題)[閉じる]

このコマンドが何をしているのかを調べようとしています。

rm OUTPUT/* >> log_${ENV} 2>&1

答え1

フォルダrm OUTPUT/*内のすべてのファイルを削除しますOUTPUT>>コマンドの出力をというファイルに追加しますlog_${ENV}。これは通常stdoutからのメッセージだけをリダイレクトします(-v引数なしでrmはstdoutに何も書き込まないでください)。

ストリーム2(rmがエラーメッセージを書き込むstderr)をストリーム1(stdout)にリダイレクトして2>&1ファイルにリダイレクトします。

したがって、このコマンドはファイルを削除し、ログファイル(存在する場合)にエラーを記録します。

答え2

このコマンドは次のとおりです。

rm OUTPUT/* 2>>log_${ENV}

のようにその他の質問、中かっこはここでは特別なことはしません。私の答えも参照してくださいENV

このコマンドは、OUTPUT/*一致するすべてのコンテンツを削除します。エラーがある場合は、指定された出力ファイルに追加されます。

シェルとシェルオプションのセットによっては、パターンはディレクトリOUTPUT/*のすべての名前に加えて、OUTPUT隠されたファイルとディレクトリの名前と一致する可能性があります。

このrmユーティリティは標準出力に出力を生成しません(これが上記のようにコマンドをオーバーライドできる理由です)。ただし、存在しないファイルを削除したり、現在のユーザーが削除権限を持っていないファイルを削除したりすると、エラーが発生する可能性があります。 (なし)ディレクトリを削除しようとします-r。これらのエラーメッセージはそのファイルに追加されます。シェルが書き換えではなく追加のために出力ファイルを開くようにするのは>>(代わりに)を使用することです。>

元のコマンドでは、>>log_${ENV} 2>&1シェルは追加するファイルを開き、rmユーティリティの標準出力ストリームをファイルに送信するように指示されます。その後、シェルは2>&1このビットを介して標準エラーストリームを同じ場所に送信します。数値1とは、2それぞれ標準出力ストリームと標準エラーストリームを表します。数値が使用されない場合は、標準出力ストリームを表します。

答え3

rm OUTPUT/*

OUTPUTフォルダ内のすべてのファイルを削除する

>> log_${ENV}

ファイルへの出力の追加log_${ENV}

2>&1

STDERRをSTDOUTにリダイレクト

引用:[1]

関連情報