ターミナルとGrepping Stderr:他の内容を変更せずにstderrの詳細なコードとgrepを実行する方法は?

ターミナルとGrepping Stderr:他の内容を変更せずにstderrの詳細なコードとgrepを実行する方法は?

コードスニペットがあり、非常に詳細なモードで実行されているとします。この最も長いコンテンツは、私がすべてのことがどのように行われたかを知るために読んでみたかったメッセージを裏切ります。しかし、端末は他のコンテンツでいっぱいです。

stderrorパイプをstdoutパイプに変換せずにgrepフィルタstderror出力を実行する方法はありますか?

例えば、

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つのオプションを答えとして含んでいます。実際に質問に答えていなくても(答えは「in bash、no」です)、他の人がこれを見る場合に備えてstdoutとstderrを交換する方法を示すために、フォーマットが正しいことを確認してください(説明とは異なります) 。

答え1:これが実行したいプログラムであると仮定します(コマンドのようには見えませんが、コマンドであるふりをします)。みんなこれには、実際に実行したいコマンドとパラメータが含まれています):

{ echo stdout; echo stderr >&2; }

それでは、stderrをgrepして、どの項目に対してstdoutを変更せずにそのままにしたいとしましょう。

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

もしそうならみんなこれにより、すべての標準出力と一部の内容を含む標準エラーの一部が分散されます。後で見るために、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私が与えることができるよりも良い説明を得るために。

関連情報