すべての行をリアルタイムで読みますか、それともすぐに読みますか?

すべての行をリアルタイムで読みますか、それともすぐに読みますか?

次のスクリプトを実行しています。

while IFS=$'\r' read -r line || [[ -n "$line" ]]; do
    something
done < "$1"

デフォルトでは、テキストファイル(例$1:)を読み、各行に対して「何かをします」。

テキストファイルには20行があります。スクリプトが実行され、10行目で実行されたときに行(21行目)を追加してテキストファイルを変更すると、後で21行目で実行されますか?

つまり、スクリプトはテキストファイルをどのように読み込みますか?ファイル全体を最初から一度に読みますか、または必要に応じて1行ずつ読みますか?

答え1

ファイル全体を一度にメモリに読み込むのではなく、一度に1行ずつ読み込むようです。私はあなたのために小さなテストをしました:

3行を含むファイルを作成します。

$ echo -e "Line 1\nLine 2\nLine 3" >> teslines.txt
$ cat testlines.txt
Line 1
Line 2
Line 3

次のような小さなスクリプトを作成します。

#!/bin/bash

while read LINE; do
    echo "$LINE"
    sleep 2
done < testlines.txt

スクリプトを実行し、新しい行の追加を開始します。

$ ./readlinetest.sh
Line 1

# Somewhere around here i started adding more lines to the file:
$ echo "Line 4" >> testlines.txt
$ echo "Line 5" >> testlines.txt
$ echo "Line 6" >> testlines.txt
$ echo "Line 7" >> testlines.txt

# Output continued:
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7

tail -f一部のライブログで実行するのとよく似ています。

関連情報