我有一个bash脚本从文件中读取行,然后用这些行做一些逻辑。Bash读取行缓冲区溢出
所以
while read line;
do
# some stuff
done < "$1"
在while循环我一个管道命令的输出tee
的身体。 当这个输出非常大时,在100K的数量级上,下一次读取线路的调用失败,while循环在读取文件中的所有行之前终止。
为什么会发生这种情况?我不是一个bash专家,但它似乎正在发生某种缓冲区溢出。如果是这样,我该如何纠正?
感谢, -D
编辑: 所以一些澄清是为了。 $ 1是提供给bash脚本的第一个命令行参数,它对应于文件名。我正在做的是将输入文件的每一行作为参数传递给另一个程序。我正在将该程序的标准输出和标准输出到| tee -a somefile
我给输入的程序是非标准的。根据我正在阅读的文件的行,该程序的输出可能非常大。
所以我在做什么更详细的例子是
while read line;
do
setSomeVar1
setSomeVar2
program --output="$setSomeVar1" -options "$line" 2>&1 | tee -a "$setSomeVar2"
done < "$1"
感谢,
-D
什么是'$ 1'?你到底在做什么? – chepner 2013-02-27 17:32:26
这个工作的正确工具...... bash是不是。 – 2013-02-27 17:33:23
循环体中的其他内容也有可能从标准输入中读取,这意味着它正在从用于“读取”命令的文件中抽取数据。 – chepner 2013-02-27 17:33:31