[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?
From: |
Chet Ramey |
Subject: |
Re: ``read -N n -t timeout'' saves partial input only when EOF is seen? |
Date: |
Thu, 24 Nov 2016 10:48:33 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 |
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 chet@case.edu http://cnswww.cns.cwru.edu/~chet/
- ``read -N n -t timeout'' saves partial input only when EOF is seen?, Clark Wang, 2016/11/24
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?,
Chet Ramey <=
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?, isabella parakiss, 2016/11/24
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?, L A Walsh, 2016/11/24
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?, Clark Wang, 2016/11/24
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?, Dmitry Goncharov, 2016/11/25
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?, Chet Ramey, 2016/11/25
- Message not available
- Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?, Chet Ramey, 2016/11/28