gpt4 book ai didi

Bash 读取行缓冲区溢出

转载 作者:行者123 更新时间:2023-11-29 09:30:31 26 4
gpt4 key购买 nike

我有一个 bash 脚本,它从文件中读取行,然后对这些行执行一些逻辑。

所以

while read line;
do
# some stuff
done < "$1"

在 while 循环的主体中,我将一个命令的输出传送到 tee。当此输出非常大(大约 100K)时,下一次调用 read line 失败并且 while 循环在文件中的所有行都被读取之前终止。

为什么会这样?我不是 bash 专家,但似乎发生了某种缓冲区溢出。如果是这样,我该如何纠正?

谢谢,-D

编辑:所以需要澄清一下。 $1 是提供给 bash 脚本的第一个命令行参数,它对应于一个文件名。我正在做的是将输入文件的每一行作为另一个程序的参数。我将该程序的 stdout 和 stderr 传送到 | tee -a somefile

我提供输入的程序是非标准的。根据我正在读取的文件行,该程序的输出可能非常大。

所以我正在做的一个更详细的例子是

while read line;
do
setSomeVar1
setSomeVar2
program --output="$setSomeVar1" -options "$line" 2>&1 | tee -a "$setSomeVar2"
done < "$1"

谢谢,

-D

最佳答案

如果循环主体中的任何其他内容正在从标准输入读取,您可以让 read 从不同的文件描述符(3 通常是免费的)获取其输入:

while read -u 3 line; do
...
done 3< "$1"

关于Bash 读取行缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com