Search code examples
bashshellubuntu-12.04wc

Store value returned by background process [not exit status]


I am counting the no. of lines in a file as a background process (I need parallel execution)

counting="wc -l < abc.xyz" &
`$counting`
counting_process_id=$!
wait $counting_process_id
echo $counting

This just returns a blank for $counting

When I do,

counting="wc -l < abc.xyz"
`$counting`
echo $counting

i.e count in the foreground. It returns the proper value.

So I guess this has to do with child variable not accessible in parent shell ? (and some answers suggest IPC) Are ther other ways to get around this.


Solution

  • So I guess this has to do with child variable not accessible in parent shell ?

    Absolutely correct.

    One way would be to make use of a temporary file and read from it:

    outfile=$(mktemp)
    ( wc -l < abc.xyz ) > "${outfile}" &
    wait
    echo $(<$outfile)