回答:
Cプログラマーなら&1、「1のアドレス」と考えることができるので、2>&1「ファイル記述子#2を#1と同じ場所にリダイレクトする」と読みます。
ニーモニックではありませんが、次のように読みました。
0標準です。
1標準です。
2stderrです。
>にあります。
<アウトです。
&(一部のシェルの)ファイル記述子です。
2>&1
2 > & 1
stderr into file descriptor 1
redirect stderr into stdout
リダイレクトの前にファイル記述子のいずれかを台無しにした場合、変更される可能性があります...
2>somefile 1>&2
2 > somefile 1 > &2
stderr into somefile and stdout into file descriptor 2
redirect stderr into somefile and stdout into somefile.
あなたが書くとき2>&1、あなたは「標準エラーは標準出力に行きます」と言っています。
それを分解しましょう。
最初に、標準エラーがで2あり、標準出力がであることを記憶します1。
だから、あなたは2何かを持っています1。
「goes to」と書かれてい>ます。
だからあなたは2>何かを持っています1。
2>filenameは標準エラーをに送信することを意味しますfilename。しかし、あなたはそれをというファイルに送信したくありません1。他の何かが必要です:既に開いているファイルの番号。それは何ですか&が目的です。
そう 2>&1。
あなたは割り当て、やっていたようにまた、それを考えることができ>イコールのようなもので、&のようなものですが$、比較します、:
f=$1
2>&1
複数のリダイレクトを持つコマンドラインを理解するために、知っておくべき重要なことは、リダイレクトが左から右に行われることです。詳細については、リダイレクトの順序を参照してください。
FD2がSTDERRであることを理解している場合、「ああ、STDOUT(FD1)を送信したところにSTDERRをキャプチャする」と思うかもしれません。