ファイルとファイルに関連付けられたファイル記述子の違い

ファイルとファイルに関連付けられたファイル記述子の違い

4行のファイルがあります。

$ cat file
First line
Second line
Third line
Fourth line
$ 

このファイルを4回読み取ると、常に最初の行が読み取られました。これは予想される結果です。

$ for i in {1..4}; do read line <file; echo "$line" ; done
First line
First line
First line
First line
$ 

ただし、ファイルディスクリプタ3に接続してfile同じ方法で読み取ると、各読み取りは入力ストリームを「食べます」。

$ exec 3<file
$ for i in {1..4}; do read -u 3 line; echo "$line" ; done
First line
Second line
Third line
Fourth line
$

ファイル記述子はなぜこのように動作しますか?

ベストアンサー1

次のようにすると、read var <fileコマンドが完了した後にファイル記述子が閉じます。したがって、次にループを通過すると、ファイル記述子は最初にリセットされます。

この場合、exec 3<file読み取りread -r -u 3 varコマンドが完了して読み取り位置が更新されても、ファイル記述子は開いたままであるため、次に読み取りは次の行を取得します。

注:これを実行しても、同じように機能しますexec 0<fileread -r var

おすすめ記事