ターミナルと Stderr の Grepping: 他に何も変更せずに、詳細なコードを実行して標準エラーを grep するにはどうすればよいでしょうか?

ターミナルと Stderr の Grepping: 他に何も変更せずに、詳細なコードを実行して標準エラーを grep するにはどうすればよいでしょうか?

コードがあり、非常に詳細なモードで実行されているとします。この最大の詳細度では、すべての状況を確認するために読みたいメッセージが表示されます。ただし、ターミナルには他のコンテンツがあふれています。

stderror パイプラインを stdout パイプラインに移行せずに、stderror 出力を grep フィルタリングする方法はありますか?

例えば、

my-command 2>&1 | grep something # ok, great; is it possible without the pipe shift?

これは可能ですか?

i.e., maybe
my-command 2>(grep something)?

答え1

これら 2 つのオプションを回答として記載していますが、実際には質問に対する回答にはなりません (答えは「bash では、いいえ」です)。これは、他の誰かがこれを見た場合に備えて、また、stdout と stderr を交換する方法を示し、フォーマットを正しくするためです (コメントとは異なります)。

答え1: これは実行したいプログラムだと仮定します(コマンドのようには見えませんが、コマンドであると仮定します。全てこれを実際に実行したいコマンドと引数に置き換えます):

{ echo stdout; echo stderr >&2; }

ここで、stderr のみを grep して何かを検索し、stdout はそのままにしたいとします。

{ echo stdout; echo stderr >&2; } 2> >(grep something)

もしそれが全てそうすると、stdout のすべてと、stderr の何かが含まれている部分が混在して取得されます。後で表示できるように、stdout と stderr を別々のファイルに書き込むこともできます。

{ echo stdout; echo stderr >&2; } 2> >(grep something > errorfile) > outputfile

stdoutとstderrの入れ替えについては(そしてなぜそうするのかについては)https://stackoverflow.com/questions/13299317/io-redirection-swapping-stdout-and-stderr私が説明できるよりも良い説明をお願いします。

関連情報