高度なファイル記述子リダイレクト、複数のファイル記述子を同時に処理する方法

高度なファイル記述子リダイレクト、複数のファイル記述子を同時に処理する方法

基本的なリダイレクトを知っていますが、同時に複数のファイル記述子をどのように処理するのか混乱しています。

1たとえば、FD sumsを作成する2スクリプトがあります3。 stderrとstdoutscript::1で出力したいです。script::2script::3

このようなことはうまくいきません。

./script.sh \
    1>&2 \
    2>&2 \
    3>&1

私が望むリダイレクトはどのように機能しますか?何を探すべきかわかりません。

私はこの問題を解決できることを知り、実際に解決策も用意しました。しかし、そのような高度な魔法を実行する方法を知りたいです。リダイレクトする項目があるのではないでしょうか/proc/self/fd/{1,2}

 +-----------+            +-----------------+
 |           >1 ---+---- 2>                 |
 | script.sh >2 ---^      |       TTY       |
 |           >3 -------- 1>                 |
 +-----------+            +-----------------+

答え1

FD sumをscript書き込む機能があります。 stderrとstdoutで出力したいです。123script::1script::2script::3

順序を変えることができます:

./script.sh 3>&1 1>&2

[略してもいいです。2>&2それだけでいいです。カシミール2より大きいfdの場合;-)]

>fdリダイレクト演算子の最大の混乱は、人々がまたは文字に魔法の属性を与えるように見えるという事実に由来します<。実際には>&そして<&100%同じ

数字を見るたびに、またはp>&q場所p<&qp職業qで分析します。fd_p = fd_q

そして、で始まり、左から右にfd1: out計算すると、とを得ることが簡単にわかります。fd2: errfd3=fd1 fd1=fd2fd1: errfd2: errfd3: out

関連情報