2014-08-27 15:35:06 -0400, Chet Ramey: > On 8/27/14, 3:20 PM, Stephane Chazelas wrote: > > > However, one could imagine using bash's read to get data off a > > tty device not in canonical mode (a serial device used as just a > > serial device), or any other non-terminal character device for > > that matter (a "strace bash -c 'read < /dev/urandom'" reveals > > there's an issue there as well), and that would be more of a > > problem. > > > > Again, not a big one (hence the [minor] tag) but still a > > non-POSIX conformance and bash seems to be the only shell with > > the problem (though ksh93 has its own bugs as usual). > > Well, again you have to rely on the system telling you what's happening. > Bash tests whether a file descriptor is seekable using, logically > enough, lseek. If it doesn't return -1/ESPIPE, bash assumes the fd is > seekable. If it does, bash does unbuffered reads. [...]
OK, sorry, I hadn't realised /dev/random was seekable (though the seek is a no-op) on Linux. > (If isatty() returns true, bash does assume that read(2) will return > newline-delimited records.) [...] That assumption is only valid (to some extent, because of lnext) if the terminal is in icanon mode though. Cheers, Stephane