bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: BASH_XTRACEFD=1 read variable stdout flushing?


From: Martin D Kealey
Subject: Re: BASH_XTRACEFD=1 read variable stdout flushing?
Date: Thu, 19 Jan 2023 04:41:06 +1000

On Tue, 17 Jan 2023 at 03:36, <dave.drambus@gmail.com> wrote:

> The following script attempts to read the first column of data, line by
line, into a variable called `$var`. With `BASH_XTRACEFD` unset, it
propertly prints r1c1, r2c1, r3c1, r4c1. With `BASH_XTRACEFD=1`, `$var`
gets set to +, ++, r2c1, r3c1, r4c1. Maybe I am just being dumb?

> echo -e $data | while read -r var junk; do
>    echo "var = $var"
> done

Technically the behaviour you're observing is correct: whenever set -x is
in effect, each shell process prints the command it's about to execute
after variable substitutions and globbing have been done, and those happen
after redirections have been done.

So the echo that's on the LHS of a pipe is run by a Bash process that
already has stdout connected to the pipe, before it prints "+ echo..." to
stdout.

You can get the effect you want by changing
    BASH_XTRACEFD=1
to
    exec {BASH_XTRACEFD}>&1

-Martin


reply via email to

[Prev in Thread] Current Thread [Next in Thread]