追加モードでファイルへのbashリダイレクトが発生する理由


回答:


19

欠けているのはfexec呼び出しでファイルを一度だけ開く(および切り捨てる)ことです。2つのechoコマンドは、すでに開かれているファイル記述子に書き込むだけです。fしたがって、ファイルはどちらのecho呼び出しでも切り捨てられません。

ファイル記述子に標準出力をリダイレクトするために、構文がある>&n場合n、ファイルディスクリプタを示すいくつかの小さな正の整数である(何も存在しない>>&nリダイレクション)。これが機能するためには、ファイル記述子がすでに開かれているファイルに関連付けられている必要があります。これは、ファイルを開いて記述子と関連付けることでexec 3>fファイルを切り捨てます(ファイルexec 3>>fは切り捨てられず、追加モードで開かれます)。で書き込むだけで>&3はファイルは開かれず、切り捨てられません。

あなたがやったなら、それは違っていただろう

echo foo >f
echo bar >f
cat f

(それぞれechoが開いていて、切り捨てられていますf)、またはより複雑です、

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(ファイルはexecそれぞれの前に開かれ、切り捨てられますecho)。

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