2>&1リダイレクトの構文をどのように覚えていますか[クローズ]


12

ニーモニックまたはシステムはありますか?これは何年も私を悩ませてきました

回答:


19

Cプログラマーなら&1、「1のアドレス」と考えることができるので、2>&1「ファイル記述子#2を#1と同じ場所にリダイレクトする」と読みます。


役立つかどうかわからない...ニーモニックは非常に個人的なものです。
lgeorget

+12これは、何が起こっているのかについての正しい説明でもあります。
ステファンシャゼル

1
それが発明されたとき、それがどのように考えられていたのだろうか(「1のアドレス」)。それらが発明されたとき、一部の人はC言語とUNIXの両方に大きく貢献したとして、それが可能だ
lgeorget

1
代わりにこれを使い始めるかもしれません;)
goldilocks 14年

3

「ツーツーワン」「ツー」であること>)は、「ツーツーワン」よりも論理的に理にかなっています。「1つ」を単一の名詞(場所)として考えると、文脈上文法的にも意味があります。名詞、そしてそれはまだ文脈上の意味をなさないでしょう。


2
わからない
マット14年

2

ニーモニックではありませんが、次のように読みました。

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

あなたが書くとき2>&1、あなたは「標準エラーは標準出力に行きます」と言っています。

それを分解しましょう。

最初に、標準エラーがで2あり、標準出力がであることを記憶します1

だから、あなたは2何かを持っています1

「goes to」と書かれてい>ます。

だからあなたは2>何かを持っています1

2>filenameは標準エラーをに送信することを意味しますfilename。しかし、あなたはそれをというファイルに送信したくありません1。他の何かが必要です:既に開いているファイルの番号。それは何ですか&が目的です。

そう 2>&1

あなたは割り当て、やっていたようにまた、それを考えることができ>イコールのようなもので、&のようなものですが$、比較します、:

f=$1
2>&1

複数のリダイレクトを持つコマンドラインを理解するために、知っておくべき重要なことは、リダイレクトが左から右に行われることです。詳細については、リダイレクトの順序を参照してください。


0

常に2-> 1であることを思い出しました。

真ん中の部分はつねにハードな部分であり、最初は鋭いキャラクター>、次に実際の生活では書ききれないキャラクターが来ることを思い出すまで、私はいつもそれを台無しにし&ます。

だから2&>1、常に2>&1


0

FD2がSTDERRであることを理解している場合、「ああ、STDOUT(FD1)を送信したところにSTDERRをキャプチャする」と思うかもしれません。


0

同僚と私は通常、「2は1よりも大きい」と言います。なぜなら、私たちのほとんどは常にstderrファイル記述子2stdoutあり1(特にUNIX / Linuxの新しい)ことを覚えていないため、リダイレクトに関する他のニーモニックstderrは実際には機能しません。唯一の問題は、アンパサンドがどこに行くのかを覚えておく必要があることです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.