Configuration Information: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -Wno-parentheses -Wno-format-security uname output: Linux medium 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu
Bash Version: 5.1 Patch Level: 0 Release Status: rc1 Description: Trying to see limits of timeout with `read -t`, I encounter strange and unconstant result: sometime `read -t .000001` don't consider timeout, when running fastly multiple time. From help: -t timeout time out and return failure... may be a fractional... ... exit status is greater than 128 if the timeout is exceeded. Repeat-By: $ read -t .0000001 foo ; echo $? 1 $ read -t .000001 foo ;echo $? 142 Ok, then microsecond seem to by smallest value. $ tot=0; for i in {1..100} ;do rt=${EPOCHREALTIME//.} read -t .000001 foo ((tot+=${EPOCHREALTIME//.}-rt)) sleep .002 done; echo ${tot:: -2}.${tot: -2} If this not end after 1 second, hit <return>, wait 1 second and repeat (and count); You won't hit 100x <return>! Maybe this return correctly after ~0.2 seconds. If yes, try again. Mostly I have to hit 3 - 8x for this 100 loop test. $ tot=0; for i in {1..100} ;do rt=${EPOCHREALTIME//.} read -t .000001 foo ((tot+=${EPOCHREALTIME//.}-rt)) done < <( while :;do sleep 1;echo;done );echo ${tot:: -2}.${tot: -2} Correct output must be < 1000 -- Félix Hauri - <fe...@f-hauri.ch> - http://www.f-hauri.ch