私の観察によると、通常のファイルにエコーするとファイルが開き、echo >>regular_file
ファイルに追加され、ファイルが閉じられます。そして、開いているファイル記述子echo >>&fd
*にエコーすると、ファイルは閉じられません。この動作はbash / zshマニュアルに文書化されていますか?
*ここで、fdはと同じ数字にすることができます3
。
答え1
構文はecho >>&fd
POSIX、Bashまたはzshによって定義されていませんecho >&fd
。これは両方のジョブがファイル記述子のコピーに関連していますが、最初のジョブには指定されたファイルを最初に開くジョブが含まれます。 (fdが標準出力echo >>regular_file
と同じ)シェルで最初にsを実行すると、この操作はファイル記述子を返し、返されたfdを標準出力fdに接続して電子を閉じます。コマンドの実行が完了すると、fdは「復元されます」(aが作成された場合は必ずしも完了する必要はありませんが、完了方法に関係なく、fdはコマンドが実行される前に参照されていたのと同じファイルを参照します)。echo 1>>regular_file
1
open
regular_file
dup
1
1
fork
1
2番目のコマンドecho >&fd
(やはりecho 1>&fd
)はfd
stdoutにのみコピーされます閉じないfd
。再度コマンドを実行した後、標準出力を復元します。
POSIXシェルコマンド言語および他のシェルに文書化されているように、最初の操作をリダイレクトと呼び、2番目の操作をファイル記述子のコピーと呼ぶ方がはっきりします。