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/