有没有办法在没有输出缓冲的情况下运行shell命令?
例如,hexdump file | ./my_script
只会将缓冲块中的hexdump输入传递给my_script,而不是逐行传递.
实际上我想知道如何使任何命令无缓冲的一般解决方案?
jpa*_*kal 119
尝试stdbuf
,包含在GNU coreutils中,因此几乎任何Linux发行版都包含在内.这会将输入,输出和错误的缓冲区长度设置为零:
stdbuf -i0 -o0 -e0 command
Run Code Online (Sandbox Code Playgroud)
Siu*_*ji- 31
该命令unbuffer
从expect
包禁止输出缓冲:
Ubuntu的联机帮助页:无缓冲-非缓冲输出
用法示例:
unbuffer hexdump file | ./my_script
Run Code Online (Sandbox Code Playgroud)
Nor*_*ame 19
AFAIK,你不能没有丑陋的黑客.写入管道(或从中读取)会自动打开完全缓冲,并且您无法对其进行任何操作:-(."线路缓冲"(这是您想要的)仅在读取/写入终端时使用.丑陋的黑客正是这样做的:他们将一个程序连接到一个伪终端,以便管道中的其他工具以行缓冲模式从该终端读/写.整个问题在这里描述:
该页面还有一些建议(前面提到的"丑陋的黑客")要做什么,即使用unbuffer
或拉动一些技巧LD_PRELOAD
.
小智 19
你也可以使用script
命令使输出hexdump
线缓冲(hexdump
将在花样伪终端上运行hexdump
,以为其标准输出写入到终端,而不是管道).
# cf. http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe/
stty -echo -onlcr
script -q /dev/null hexdump file | ./my_script # FreeBSD, Mac OS X
script -q -c "hexdump file" /dev/null | ./my_script # Linux
stty echo onlcr
Run Code Online (Sandbox Code Playgroud)