Bash文件描述符3和读取行

sav*_*day 2 bash file-descriptor while-loop

我一直在寻找,找不到明确的线索来验证我从给我的脚本中得出的结论。

因此file.txt是一个打开的文件(由文件描述符3表示),并通过记录时间戳的脚本不断添加新行。每次将新行添加到文件时,下一段是否会进入while循环?

exec 3 < /path/file.txt
while read <&3
  command
  command..
done
Run Code Online (Sandbox Code Playgroud)

因此,只要我不关闭文件描述符,添加到我的file.txt中的新行将始终激活while循环,对吗?

请帮我解决这个问题。谢谢

Jon*_*ler 5

要读取文件描述符3,请使用read -u 3(请参阅Bash内置文件)。不要忘记指定应该将值读入的变量名。

一旦read检测到EOF,它将停留在EOF处;在那之后,它将不会发现文件的添加。因此,如果向文件中添加行的代码比此脚本中的代码慢,您将到达终点,循环将终止。如果您不希望这样做,请考虑使用tail -f /path/file.txt,也可以考虑使用流程替换

while read -u 3 line
do
    command1
    command2
done 3< <(tail -f /path/file.txt)
Run Code Online (Sandbox Code Playgroud)

或者,如果您想执行以下操作exec

exec 3< <(tail -f /path/file.txt)

while read -u 3 line
do
    command1
    command2
done
Run Code Online (Sandbox Code Playgroud)

请注意,tail -f循环将永远不会结束,除非您以某种方式中断了脚本。