Hi,

As tested interactively with bash 5.0.7(1) and GNU/Linux, the following command 
prints a constant number of active file descriptors, as expected:

$ while :; do { read; } < <(:); sleep 0.5; printf %s\\n /proc/self/fd/* | wc 
-l; done
6
6
6
6
6
... etc

However, merely by assigning a variable prior to the loop, though within the 
same line, the number will continuously grow:

$ var=0; while :; do { read; } < <(:); sleep 0.5; printf %s\\n /proc/self/fd/* 
| wc -l; done
6
7
8
9
10
... etc

If then adjusted so that the read command is not part of a compound command, 
normality is restored:

$ var=0; while :; do read < <(:); sleep 0.5; printf %s\\n /proc/self/fd/* | wc 
-l; done
5
5
5
5
5
... etc

I noticed this behaviour upon running out of file descriptors after executing 
structurally similar code that deliberately utilises a compound command to read 
twice, thus discarding the first line of input.

-- 
Kerin Millar <k...@plushkava.net>

Reply via email to