On 11/24/16 2:57 AM, Clark Wang wrote:
> See following example:
> 
> # echo $BASH_VERSION
> 4.4.5(2)-release
> # ( printf 12345 ) | ( read -t 1 -N 10 v; echo "<$v>" )
> <12345>
> # ( printf 12345; sleep 2 ) | ( read -t 1 -N 10 v; echo "<$v>" )
> <>
> #
> 
> The second "read" did not save "12345" to "v". Is this a bug?

No, it's a race condition.  It depends on when the kernel schedules
each process in the pipeline: if the read gets scheduled and times out
before the subshell that runs the printf/sleep combination runs and
writes something to the pipe, you won't get any output.  On Mac OS X,
for example, you get <12345>.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/

Reply via email to