linux - 在控制台中为长行设置标准输入 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() 禁用标准输入和标准输出的缓冲)
解决方案
没有剪辑线条的缓冲区。
例子:
$ { 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
推荐阅读
- alfresco - Alfresco: Found 1 integrity violations: The association source type is incorrect
- gatsby - 每次构建时 git 中的 gatsby index.html 都会发生变化
- java - Esper 部署错误:静态方法的返回类型无效,需要 Java 类
- web - 如何创建网络会议服务?像 Trueconf
- postgresql - 运行 docker compose 会导致“连接到 localhost:5432 被拒绝”。例外
- c# - 为什么在数据库中创建新行时,键中的 currentValue 等于这个奇怪的 int?
- elassandra - Elassandra 没有索引 UDT
- php - ini_set("display_errors", "on") 和 error_reporting(E_ALL) 的区别
- ios - [Material Components iOS][TextFields] 在主视图和文本字段之间添加边距
- c# - 使用 DbSet 查找和延迟加载偶尔为空的实体框架外键