[Top][All Lists]

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

Redirect a backgrounded process' stdout toward COPROC's stdin

From: Davide Baldini
Subject: Redirect a backgrounded process' stdout toward COPROC's stdin
Date: Sun, 03 Jun 2012 14:20:23 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv: Gecko/20111110 Icedove/3.0.11

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

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

    # 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):

    # 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:

    # 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:

    # 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

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