首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash文件描述符3和while read行

Bash文件描述符3和while read行
EN

Stack Overflow用户
提问于 2014-12-08 14:56:30
回答 2查看 3.4K关注 0票数 3

我一直在寻找,但找不到清晰的线索来验证我从给我的脚本中推断出来的东西。

因此,file.txt是一个打开的文件(通过文件描述符3),并且不断地通过记录时间戳的脚本添加新行。每次向文件中添加新行时,下面的代码片段是否会进入while循环?

代码语言:javascript
复制
exec 3 < /path/file.txt
while read <&3
  command
  command..
done

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

请帮我把这个弄清楚。谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-12-08 15:00:49

要读取文件描述符3,请使用read -u 3 (请参阅Bash builtins)。不要忘了指定要读取值的变量名。

一旦read检测到EOF,它就停留在EOF;在此之后,它不会发现添加到文件中的内容。因此,如果向文件中添加行的代码比此脚本中的代码慢,您将到达终点,循环将终止。如果你不想这样,可以考虑使用tail -f /path/file.txt,也许也可以使用process substitution

代码语言:javascript
复制
while read -u 3 line
do
    command1
    command2
done 3< <(tail -f /path/file.txt)

或者,如果您想要执行exec

代码语言:javascript
复制
exec 3< <(tail -f /path/file.txt)

while read -u 3 line
do
    command1
    command2
done

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

票数 6
EN

Stack Overflow用户

发布于 2014-12-08 15:09:32

while所以只要我不关闭文件描述符,添加到file.txt中的新行将始终激活

循环,对吗?

回答:错误。

重定向exec 3 < /path/file.txt使您能够使用文件描述符从/path/file.txt读取,但不执行任何操作,从而允许任何类型的触发从/path/file.txt到您的代码的。这样想吧。如果/path/file.txt中有一个新的行,你可以read它,但是重定向没有办法让知道文件中是否已经添加了一个新的行供你的代码响应。这仍然取决于您的代码来检查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27352868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档