是否可以在 bash 3.2 中进行非阻塞读取,并且也可以移植到 POSIX 环境?
在现代版本的 bash 中,可以使用read -r -d'' -t $TIMEOUT -N $NBYTES myvar
,但我需要支持 bash 3.2,其中-N
不存在,并且超时后myvar
不会写入,并且部分读取的数据会丢失。
我看到过其他答案建议使用dd
GNU 特定的iflags
参数,但这对我来说不起作用,因为我不能确定 GNUdd
是否存在。
因为我的目标是可移植性,所以我不想用 Python、Perl 等来编写它,但如果这是不可能的,我就必须这样做。
对于上下文,我想要做的是script
将其输出重定向到管道来运行。我的 bash 脚本将从管道中读取数据,当有任何数量的数据可用时,它会将其包装在信封中并输出。这将使消费者能够多路复用多个输入流。为了使其性能良好,它需要低延迟,并且还可以处理合理大小的数据块(而不是一次 1 个字节)。