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?