次のスクリプトを実行しています。
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
一部のライブログで実行するのとよく似ています。