基本的なリダイレクトを知っていますが、同時に複数のファイル記述子をどのように処理するのか混乱しています。
1
たとえば、FD sumsを作成する2
スクリプトがあります3
。 stderrとstdoutscript::1
で出力したいです。script::2
script::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で出力したいです。1
2
3
script::1
script::2
script::3
順序を変えることができます:
./script.sh 3>&1 1>&2
[略してもいいです。2>&2
それだけでいいです。カシミール2より大きいfdの場合;-)]
>
fdリダイレクト演算子の最大の混乱は、人々がまたは文字に魔法の属性を与えるように見えるという事実に由来します<
。実際には>&
そして<&
100%同じ。
数字を見るたびに、またはp>&q
場所p<&q
をp
職業q
で分析します。fd_p = fd_q
そして、で始まり、左から右にfd1: out
計算すると、とを得ることが簡単にわかります。fd2: err
fd3=fd1 fd1=fd2
fd1: err
fd2: err
fd3: out