我正在运行这样的脚本:
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
在一些实时日志上运行。