我一直在寻找,但找不到清晰的线索来验证我从给我的脚本中推断出来的东西。
因此,file.txt是一个打开的文件(通过文件描述符3),并且不断地通过记录时间戳的脚本添加新行。每次向文件中添加新行时,下面的代码片段是否会进入while循环?
exec 3 < /path/file.txt
while read <&3
command
command..
done因此,只要我不关闭文件描述符,添加到file.txt中的新行将始终激活while循环,对吗?
请帮我把这个弄清楚。谢谢
发布于 2014-12-08 15:00:49
要读取文件描述符3,请使用read -u 3 (请参阅Bash builtins)。不要忘了指定要读取值的变量名。
一旦read检测到EOF,它就停留在EOF;在此之后,它不会发现添加到文件中的内容。因此,如果向文件中添加行的代码比此脚本中的代码慢,您将到达终点,循环将终止。如果你不想这样,可以考虑使用tail -f /path/file.txt,也许也可以使用process substitution:
while read -u 3 line
do
command1
command2
done 3< <(tail -f /path/file.txt)或者,如果您想要执行exec
exec 3< <(tail -f /path/file.txt)
while read -u 3 line
do
command1
command2
done请注意,除非以某种方式中断脚本,否则tail -f循环永远不会结束。
发布于 2014-12-08 15:09:32
while所以只要我不关闭文件描述符,添加到file.txt中的新行将始终激活
循环,对吗?
回答:错误。
重定向exec 3 < /path/file.txt使您能够使用文件描述符从/path/file.txt中读取,但不执行任何操作,从而允许任何类型的触发从/path/file.txt到您的代码的。这样想吧。如果/path/file.txt中有一个新的行,你可以read它,但是重定向没有办法让知道文件中是否已经添加了一个新的行供你的代码响应。这仍然取决于您的代码来检查。
https://stackoverflow.com/questions/27352868
复制相似问题