Bashの「2>>(command)」リダイレクトの意味

Bashの「2>>(command)」リダイレクトの意味

しばらく前にスクリプトを作成し、その周りにロギングを追加しましたが、ロギングリダイレクトがどのように機能するかを忘れていました。 :-(

主な点は次のとおりです。

#!/bin/bash

LOGFILE=/some/path/mylogfile

(
  # here go my commands which produce some stdout
  # and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )

スクリプトを実行すると、何も印刷されず、stdout内容だけが印刷されますstderr。ログファイルは${LOGFILE}標準出力と標準エラーをキャプチャします。

スクリプトを実行すると、すべてが正常で端末に出力がないことがわかります。出力がある場合は問題が発生したことがわかり、ログファイルを調べて問題が何であるかを確認できます。

今私を混乱させるリダイレクト部分は次の構文です。2> >( some command )

そこで何が起こっているのかを説明できる人はいますか?

ベストアンサー1

>(...)~と呼ばれるプロセスの交換。これにより、「外部」プログラムがファイルのように「内部」プログラムに書き込むことができます。

この場合は、追加する内容を作成してstderrから、すべての内容を再作成してください。tee -a ${LOGFILE} >&2LOGFILEstderr

リダイレクト演算子は任意の方向にプロセス置換を実行できるため、ここに書くことも(この例のように)読み取ることもできます。これは、たとえばループ自体を実行するために実行するのに<(...)便利な方法です。while

おすすめ記事