ファイル記述子をエコーするとファイルが上書きされますか?

ファイル記述子をエコーするとファイルが上書きされますか?

ファイル記述子に書き込もうとしたときに何が起こっているのか理解できませんか?元の内容を上書きしたようですが?これが予想される動作ですか?

以下の例では、これを複製しました。

$ echo "The quick brown fox ..." > example.txt  
$ echo "The quick brown fox ..." >> example.txt
$ cat example.txt
The quick brown fox ...  
The quick brown fox ...
$ exec 88<>example.txt
$ cat example.txt
The quick brown fox ...  
The quick brown fox ...
$ echo "jumped" >&88  
$ cat example.txt
jumped  
ck brown fox ...  
The quick brown fox ...
$ echo "jumped" >&88  
$ cat example.txt
jumped  
jumped  
n fox ...  
The quick brown fox ...

ベストアンサー1

ディスクリプタ88で読み出しが行われていないため、現在のナビゲーション位置は「0」であり、その時点で書き込みが行われる。

これとは対照的に、この前にファイルを読み取ると追加の操作が発生します。

bash-4.2$ cat <&88
The quick brown fox ...
The quick brown fox ...

bash-4.2$ echo hello >&88

bash-4.2$ cat example.txt 
The quick brown fox ...
The quick brown fox ...
hello

bash-4.2$ echo more >&88

bash-4.2$ cat example.txt 
The quick brown fox ...
The quick brown fox ...
hello
more

おすすめ記事