gnu coreutils split 详细刷新吗?

gnu coreutils split 详细刷新吗?

当使用详细模式的 GNU coreutilssplit命令时,如何让 STDOUT 中出现的行根据文件最终创建的时间进行刷新?

例如,像这样运行:

~/coreutils/bin/split --verbose -d -u -l 10000000 1>out & tail -f out
creating file `x00'
creating file `x01'
creating file `x02'
[...]

我原本以为在文件完全写入后,该行creating file 'x00'会出现在文件中,但实际上,直到整个文件最终处理完毕,似乎才写入任何内容。有没有办法改变这种行为?outout

答案1

好吧,据我所知,旧版本的 GNU coreutils(7.5 之前)没有简单的解决方法,但较新的版本(7.5 以后)有一个标准缓冲区您可以使用命令强制 split(或任何其他 coreutil 程序)立即打印其输出。对于您的情况,您可以使用:

~/coreutils/bin/stdbuf -o0 ~/coreutils/bin/split --verbose -d -u -l 10000000 1>out & tail -f out

这将在禁用输出缓冲的情况下运行拆分。

请注意,拆分中的 -u 选项(无缓冲)不会影响消息打印,只会影响其拆分的数据(如果禁用该缓冲,感觉会更慢)。

有关stdbuf的信息:http://www.gnu.org/software/coreutils/manual/html_node/stdbuf-invocation.html

对于使用旧版 coreutils 的替代方案,请使用命令检查此解决方案解除缓冲来自包 expect(tcl):https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

相关内容