I'm having a problem with a script that used to work, which I reduced
to the following test case:

    #!/bin/bash

    function docat() {
        for x in 1 2 3 ; do true; done
        cat "$@"
    }

    for x in $(seq 25); do
        docat <(echo a) <(echo a) <(echo a) <(echo a) <(echo a) <(echo a)
    done

Expected behaviour: A lot of lines with an "a" are printed

Actual behaviour: Some lines with an "a" are printed but a lot of
prints fail with an error:

    [...]
    a
    cat: /dev/fd/63: No such file or directory
    cat: /dev/fd/62: No such file or directory
    cat: /dev/fd/61: No such file or directory
    cat: /dev/fd/60: No such file or directory
    a
    [...]

Now if you remove the apparently useless for loop in the first line of
docat, this works as I would expect. It also works on zsh.

After some head banging I found that what makes the difference is the
latest bash update, bash-5.0.016. On bash-5.0.015 this script works,
so the the patch that makes the difference is this one:
https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-016

Was the script technically wrong but worked due to some bash
implementation detail, or is this could actually a problem with bash?

I found a very similar report in
https://lists.gnu.org/archive/html/bug-bash/2020-03/msg00062.html ,
but I'm not sure if it's the same underlying issue, since that
particular case is said to be introduced between 4.4-5.0, and this one
is between 5.0.015-5.0.016, and no fix is yet available to test.

Thanks for your help,
- Joan Bruguera

PS: This is the first time I post to the mailing list, so preemptive
apologies for any mistake I could have made.

Reply via email to