--- src/cmd/ksh93/bltins/read.c +++ src/cmd/ksh93/bltins/read.c 2008-12-17 14:01:01.000000000 +0000 @@ -280,6 +280,19 @@ int sh_readline(register Shell_t *shp,ch delim = ((unsigned)flags)>>D_FLAG; if((shp->fdstatus[fd]&IOTTY) && !keytrap) tty_raw(fd,1); +#if defined(__linux__) + if ((flags&N_FLAG) && (shp->fdstatus[fd]&(IOTTY|IONOSEEK))==0) + { + struct stat st; + if ((fstat(fd, &st) == 0) && S_ISFIFO(st.st_mode)) + { + int fdflg; + if (((fdflg = fcntl(fd, F_GETFL)) != -1) && !(fdflg & O_NONBLOCK)) + fcntl(fd, F_SETFL, fdflg|O_NONBLOCK); + shp->fdstatus[fd] |= IONOSEEK; + } + } +#endif } binary = nv_isattr(np,NV_BINARY); if(!binary && !(flags&(N_FLAG|NN_FLAG)))