如何使任何shell命令的输出不加缓冲?

问题描述 投票:63回答:5

有没有一种方法可以运行shell命令而不进行输出缓冲?

例如,hexdump file | ./my_script仅将输入的十六进制转储以缓冲的块形式传递给my_script,而不是逐行传递。

实际上我想知道一个通​​用的解决方案,如何使任何命令都无缓冲?

stdout buffering
5个回答
19
投票

AFAIK,没有丑陋的黑客,你做不到。写入管道(或从管道读取)会自动打开完整缓冲,您对此无能为力:-(。“ Line buffering”(这是您想要的)仅在读取/写入终端时使用。丑陋的黑客正是这样做的:他们将程序连接到伪终端,以便管道中的其他工具以行缓冲模式从该终端读取/写入。整个问题描述如下:


122
投票

尝试stdbuf,包含在GNU coreutils中,因此实际上是任何Linux发行版。这会将输入,输出和错误的缓冲区长度设置为零:


32
投票

unbuffer软件包中的命令expect禁用输出缓冲:Ubuntu Manpage: unbuffer - unbuffer output


19
投票

[您也可以使用script命令使hexdump的输出成为行缓冲的(hexdump将在伪终端中运行,这会诱骗hexdump考虑将其stdout写入终端,而不是到管道)。


0
投票

对于macOS上的某些命令,您可以使用NSBufferedIO环境变量:

© www.soinside.com 2019 - 2024. All rights reserved.