私はbashリダイレクトについて読んで、これに関する2つの記事を見つけました。
最初:
https://www.brianstorti.com/understanding-shell-script-idiom-redirect
説明する
&[FILE_DESCRIPTOR]を使用してファイル記述子の値を参照できます。
しかし、2番目の記事と同時に読む
第二
https://catonmat.net/bash-one-liners-explained-part-Three
状態
また、Bashでは次のように書かれています。
$ command &>file
正確には次のようになります。
$ command >&file
しかし、最初の形式が好ましい。
ファイル記述子の>&file
作成方法file
答え1
実際には互いに衝突する2つの異なる演算子です。 1つはBourneシェルで、もう1つはCシェルで発生します。
cmd >&2
部族
cmd 1>&2
cmd
stdout(fd 1)が同じリソース(同じリソース)に接続されているかどうかファイル説明を開く)はfd 2と同じです(x>&y
(またはx<&y
まったく同じ)fd xをfd yと同じリソースにリダイレクトします)。
cmd >& file
実行時のCシェル(csh
)演算子のfd 1と2cmd
はすべて新しいファイル説明を開くfile
書き込み専用モードで開いて取得します。 Bourneシェル構文でこれに対応するものは次のとおりです。cmd > file 2>&1
彼らは衝突します。実際に使用されているものは、ターゲットが数字かどうかによって異なります。
あなたが持っているなら:
cmd >&"$file"
$file
一連の 10 進数が含まれている場合は Bourne シェル演算子が使用され、それ以外の場合は C シェル演算子が使用されます。
そのため、csh演算子の使用を避け、> file 2>&1
代わりにBourneシェル構文()を使用するのが最善です。
bash
あるいは、演算子(and)zsh
もありますが、これはPOSIXで実行されるようになっているため、POSIX規則に違反することに注意してください。しかし、上記のような競合問題はありません。&>
>&
cmd &> file
cmd &
> file
sh