Machine: i486
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -O2 -march='i486' (plus the flags added by Makefile)
uname output: Linux debianBunker 2.6.26-2-686 #1 SMP Wed Sep 21 04:35:47
UTC 2011 i686 GNU/Linux
Machine Type: i486-pc-linux-gnu

Bash Version: 4.2.0(5)-release
Patch Level: 5
Release Status: release

Description:
In the following test script I run an elementary coprocess to which the
echo built-in, run in background, attaches its standard-output:

    #!/bin/bash
    # TEST 1
    coproc /bin/sleep 100
    echo >&${COPROC[1]} &

The script always fails, for no apparent reason, giving the output:

    ./test.sh: line 4: ${COPROC[1]}: Bad file descriptor

I wonder if the correct syntax should be rather this one (ampersand
moved before redirection):

    #!/bin/bash
    # TEST 2
    coproc /bin/sleep 100
    echo & >&${COPROC[1]}

This second example seems to work since it reports no errors during
execution, but with this syntax, the redirection is not performed in
practice; in fact, consider this other test:

    #!/bin/bash
    # TEST 3
    /bin/echo abc & >xfile

Test 3 creates the file xfile, but does not write anything into it.
Curiously, trying again to position the ampersand after the redirection
make the echo work fine:

    #!/bin/bash
    # TEST 4
    /bin/echo abc >xfile &

Test 4 creates the file xfile with inside the string abc.

What's wrong with the coproc? And what's the correct position for the
ampersand, before redirection, or after?

Reply via email to