2014-08-27 08:10:01 -0400, Chet Ramey: > On 8/25/14, 4:24 PM, Stephane Chazelas wrote: > > If you run (here testing on Linux): > > > > bash -c 'read a; echo "<$a>"; tr b c' > > > > And enter aaa<Ctrl-V><Ctrl-J>bbb<Return> > > > > You see "<aaa>", but not "ccc". That's because "read" reads up > > to 128 bytes of data in one read(2) invocation instead of > > reading one byte at a time like on other types on non-seekable > > files. > > While this is true, it's not complete. Bash relies on the terminal > driver returning newline-delimited lines when reading from the > terminal. If you try to fool it, you can probably succeed. [...]
I agree <Ctrl-V><Ctrl-J> is clearly an attempt at fooling it and it's reasonable to expect a read on a terminal in canonical mode to return a single line. 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). -- Stephane