私はこの表現に少し戸惑いました:
gcc -c -g program.c >& compiler.txt
&>filename
stdoutとstderrの両方をファイルにリダイレクトすることはわかっていますfilename
。しかし、この場合、アンパサンドは後大なり記号。 という形式になっているようです。M>&N
ここで、M
とN
はファイル記述子です。
上記のスニペットでは、M=1
と を実行しますかN='compiler.txt'
? これは、次のコードと具体的にどう違うのでしょうか:
gcc -c -g program.c > compiler.txt (ampersand removed)
私の理解では、開いている各ファイルは 2 より大きいファイル記述子に関連付けられています。これは正しいですか?
もしそうなら、ファイル名はリダイレクトのターゲットとしてそのファイル記述子と交換可能でしょうか?
ベストアンサー1
これは と同じです&>
。bash のマニュアルページから:
標準出力と標準エラーのリダイレクト この構造により、標準出力 (ファイル記述子 1) と標準エラー出力 (ファイル記述子 2) の両方を、word の展開名を持つファイルにリダイレクトできます。
There are two formats for redirecting standard output and standard error: &>word and >&word Of the two forms, the first is preferred. This is semantically equiva- lent to >word 2>&1