모든 줄을 실시간으로 읽나요, 아니면 즉시 읽나요?

모든 줄을 실시간으로 읽나요, 아니면 즉시 읽나요?

다음과 같은 스크립트를 실행하고 있습니다.

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

기본적으로 텍스트 파일(예: $1)을 읽고 각 줄에 대해 "무언가를 수행"합니다.

텍스트 파일에는 20줄이 있습니다. 스크립트가 실행되어 10행에서 실행될 때 행(21행)을 추가하여 지금 텍스트 파일을 수정하면 나중에 21행에서 실행됩니까?

즉, 스크립트는 텍스트 파일을 어떻게 읽습니까? 전체 파일을 처음부터 한 번에 읽나요, 아니면 필요한 경우 한 줄씩 읽나요?

답변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일부 라이브 로그에서 실행하는 것과 매우 유사하게 작동합니다 .

관련 정보