Ubuntu系统下用cat>文本文件时4k以上长行被截断的解决方案问询
问题根因
你遇到的超过4k长度的单行内容被截断的问题,是**终端默认规范模式(行缓冲)**的限制导致:该模式下终端会在tty层缓存输入直到收到换行符或EOF信号,单缓冲区默认上限为4096字节,和cat工具本身无关,因此调整cat参数、用stdbuf修改进程级stdio缓冲都不会生效。
可行解决方案
方案1:临时修改终端模式(无额外依赖,最便捷)
直接执行组合命令:
stty -icanon && cat > 目标文件名 && stty icanon
执行后直接粘贴内容,按一次Ctrl+D即可结束操作,终端会自动恢复默认行缓冲模式,完全不影响后续使用,支持任意长度的单行输入。
如果需要管道输入的话同理:
stty -icanon && cat | 目标命令 && stty icanon
小提示:该模式下退格等编辑快捷键会暂时失效,粘贴内容前确认内容正确即可。
方案2:使用unbuffer命令(自动处理终端模式,操作零感知)
先安装依赖包:
sudo apt install expect
之后使用方式和原生cat完全一致:
unbuffer cat > 目标文件名
粘贴完成后按Ctrl+D结束即可,unbuffer会自动完成终端模式的切换和恢复,使用体验和原生cat无差异。
方案3:轻量编辑器写入(适合需要简单编辑的场景)
nano、vim等编辑器会自动关闭终端行缓冲限制,直接执行:
nano 目标文件名
粘贴内容后按Ctrl+O回车保存,Ctrl+X退出即可,操作同样简便。
内容的提问来源于stack exchange,提问作者Summer-Sky
相关产品推荐
相关产品推荐

