不知道您的脚本中的内容,我们无法确定地说。
例如,如果您要这样做:
# DON'T DO THIS: Violates http://mywiki.wooledge.org/DontReadLinesWithForfor line in $(cat); do : ...do something with "$line"...done
…这将等到所有标准输入都可用后,导致您描述的挂起。
但是,如果您遵循最佳实践(按照BashFAQ#1进行操作),则代码将更像这样运行:
while IFS= read -r line; do : ...do something with "$line"done
…并且实际上会正常运行,并 受writer进行的任何缓冲的影响
。有关控制缓冲的提示,请参见BashFAQ#9。
最后,引用DontReadLinesWithFor:
阅读线的最后一个问题
for是效率低下。甲while read循环读取在从输入流中一次一行;$(<afile)一次将整个文件提取到内存中。对于小文件,这不是问题,但是如果您正在读取大文件,则内存需求将非常巨大。(Bash必须分配一个字符串来保存文件,而另一组字符串来保存单词拆分结果…本质上,分配的内存将是输入文件大小的两倍。)
显然,如果内容不确定,则存储要求和完成时间也将相同。



