首页 > 解决方案 > 在控制台中为长行设置标准输入 unbufferd ... cat > textfile

问题描述

也许是一个奇怪的问题,但是

cat在 ubuntu linux 上粘贴到文本文件(完成时按 Ctrl+Dcat > textfile发出EOF信号)时,我遇到了一个奇怪的结果。事实证明,stdin 行缓冲区可防止超过 4k的行(请参阅Line Buffered Cat

gnu cat(与posix cat相比)的选项和stdbuf ( stdbuf -i0 -o0 cat > textfile) 的使用都不会导致文件超过 4k。

显然我做错了什么,因为cat当使用 nano 或 vim 创建这些文件时,stdout 非常好。

我真的很想继续使用这种方便的方式来动态创建文件或从 cli 管道输入其他命令,而不受此限制。

谢谢

版本:猫(GNU coreutils)8.28

编辑:它显然不是 cat 本身,而是标准输入在终端中缓冲的方式,但是 vim 和 nano 设法将其切换(另请参见使用 setvbuf() 禁用标准输入和标准输出的缓冲

标签: linuxcommand-line-interfaceposixstdincat

解决方案


没有剪辑线条的缓冲区。

例子:

$ { for i in {1..4096}; do printf x; done; echo y; } | cat > data

该文件包含 4098 个字节:4096 次 x、一个 y 和一个换行符。

$ stat -c %s data
4098

它只有一行。

$ wc -l data
1 data

推荐阅读