[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Modify buffering of standard streams via environment variables (not
From: |
Zachary Santer |
Subject: |
Re: Modify buffering of standard streams via environment variables (not LD_PRELOAD)? |
Date: |
Sat, 20 Apr 2024 16:00:29 -0400 |
On Sat, Apr 20, 2024 at 11:58 AM Carl Edquist <edquist@cs.wisc.edu> wrote:
>
> On Thu, 18 Apr 2024, Zachary Santer wrote:
> >
> > Finally had a chance to try to build with 'stdbuf --output=L --error=L
> > --' in front of the build script, and it caused some crazy problems.
>
> For what it's worth, when I was trying that out msys2 (since that's what
> you said you were using), I also ran into some very weird errors when just
> trying to export LD_PRELOAD and _STDBUF_O to what stdbuf -oL sets. It was
> weird because I didn't see issues when just running a command (including
> bash) directly under stdbuf. I didn't get to the bottom of it though and
> I don't have access to a windows laptop any more to experiment.
This was actually in RHEL 7.
stdbuf --output=L --error=L -- "${@}" 2>&1 |
tee log-file |
while IFS='' read -r line; do
# do stuff
done
#
And then obviously the arguments to this script give the command I
want it to run.
> Also I might ask, why are you setting "--error=L" ?
>
> Not that this is the problem you're seeing, but in any case stderr is
> unbuffered by default, and you might mess up the output a bit by line
> buffering it, if it's expecting to output partial lines for progress or
> whatever.
I don't know how buffering works when stdout and stderr get redirected
to the same pipe. You'd think, whatever it is, it would have to be
smart enough to keep them interleaved in the same order they were
printed to in. That in mind, I would assume they both get placed into
the same block buffer by default.