我可以为tr禁用缓冲吗

我说

tr似乎要缓冲其输入,以便该命令LongRunningCommand|tr \\n ,仅在LongRunningCommand积累了几千字节的输入后才开始产生输出。

有没有一种方法可以强制tr停止此缓冲,或者可以使用其他字符替换新行而不进行缓冲的任何其他命令?


PS我已经尝试了关闭管道中的缓冲而没有成功的前两个建议

斯蒂芬·查泽拉斯(Stephane Chazelas)

命令通常不缓冲其输入。他们会read()为很大的块做一个a,但是当从管道中读取时,如果管道中没有那么多字节,read()系统调用将返回包含所有字符的字符,并且如果可以的话,应用程序通常会与之一起使用。

值得注意的例外是mawk它将一直保持read()到输入缓冲区已满为止。

应用程序确实会缓冲其输出(stdout)。通常的行为是,如果输出要发送到tty,则缓冲将是逐行的(也就是说,直到有完整的行要输出时才开始向stdout写入,或者对于完全长行),而对于其他所有类型的文件,缓冲都是按块进行的(也就是说,直到有一个完整的块要写入时才会开始写入(类似于4KiB / 8KiB ...取决于软件和系统) ))。

因此,在您的情况下,LongRunningCommand可能会按块缓冲其输出(因为它的输出是管道而不是tty),并且tr可能会按行缓冲其输出,因为它的输出可能是终端。

但是,由于您从输出的每个换行符中删除了该字符,它将永远不会输出一行,因此缓冲将按块进行。

因此,在这里您想同时为LongRunningCommand禁用缓冲tr在GNU或FreeBSD系统上:

stdbuf -o0 LongRunningCommand | stdbuf -o0 tr '\n' ,

请注意,如果您想用逗号将各行连接起来,则最好使用paste -sd , -这样,输出将以换行符终止(您可能仍需要禁用缓冲)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以为打开的文档禁用Ubuntu One同步吗?

来自分类Dev

我可以为打开的文档禁用Ubuntu One同步吗?

来自分类Dev

我可以为所有站点禁用无限滚动吗?

来自分类Dev

我可以为我的应用禁用自定义键盘(iOS8)吗?

来自分类Dev

我可以为进程禁用未处理的异常处理程序吗?

来自分类Dev

可以为网卡设置dma缓冲区地址吗?

来自分类Dev

我可以为此使用Pivot吗?

来自分类Dev

我可以为firewalld安装GUI吗?

来自分类Dev

我可以为firewalld安装GUI吗?

来自分类Dev

我可以为此使用Pivot吗?

来自分类Dev

可以为新的Android版本禁用应用程序吗?

来自分类Dev

我可以禁用SFINAE吗?

来自分类Dev

我可以禁用updatedb吗?

来自分类Dev

我可以为此使用ExtJS表布局吗?

来自分类Dev

我可以为无效寿命编写测试吗?

来自分类Dev

我可以为特定功能明确取消定义宏吗?

来自分类Dev

我可以为匿名类型属性分配空值吗?

来自分类Dev

我们可以为WCF做URL重写吗

来自分类Dev

我可以为python更新pycharm intellisense吗?

来自分类Dev

我可以为MVC视图提供动态模型吗

来自分类Dev

clang格式可以为我对齐#define的代码块吗?

来自分类Dev

我可以为单个文件制作Vim映射吗?

来自分类Dev

我可以为联合的C ++函数设置默认参数吗

来自分类Dev

Frege:我可以为递归类型派生“ Show”吗?

来自分类Dev

我可以为rdf:List成员指定范围吗?

来自分类Dev

我可以为VsVim定义命令行命令吗?

来自分类Dev

我可以为Angular Material启用硬件加速吗?

来自分类Dev

我可以为函数绑定“ this”以外的其他东西吗?

来自分类Dev

我可以为多选组合框创建SelectedItems属性吗

Related 相关文章

热门标签

归档