>&[FILE_DESCRIPTOR]および>&ファイルbashリダイレクト演算子

>&[FILE_DESCRIPTOR]および>&ファイルbashリダイレクト演算子

私はbashリダイレクトについて読んで、これに関する2つの記事を見つけました。

ファイル記述子の>&file作成方法file

答え1

実際には互いに衝突する2つの異なる演算子です。 1つはBourneシェルで、もう1つはCシェルで発生します。

cmd >&2

部族

cmd 1>&2

cmdstdout(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 &> filecmd &> filesh

関連情報