阅读每一行:实时还是立即?

阅读每一行:实时还是立即?

我正在运行这样的脚本:

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

基本上,它读取一个文本文件(如$1)并为每一行“做一些事情”。

该文本文件有 20 行。如果我现在通过在脚本运行并在第 10 行上运行时添加一行(第 21 行)来修改文本文件,那么稍后它会在第 21 行上运行吗?

换句话说,脚本如何读取文本文件?一开始就一次性读取整个文件,或者必要时逐行读取?

答案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在一些实时日志上运行。

相关内容