开发者社区> 问答> 正文

cat命令能够读取的文本长度是否存在限制?

我用cat命令分行读取js文件,将其中内容传递给mongo时,如果单行文本过长,则往往会出现“unexpected identifier"之类的错误,但是用mongo直接处理js文件时则没有这类问题。

展开
收起
a123456678 2016-06-20 11:08:57 2669 0
1 条回答
写回答
取消 提交回答
  • cat 能够读取的文本长度没有限制。而且 cat (默认参数)根本不管文件有多少行;它只是在不断地复制数据而已。

    问题出在 mongo shell 使用的 linenoise 库。在 /shell/linenoise.cpp:2541 (不同版本可能有差异)处,如果不是从终端获取数据,linenoise 总是按每行最多 4096 字节(UTF-8)来取,所以 mongo 读到了被断开的行(linsenoise 根本没考虑过它这样做会把某些行断开;也许他们根本没有测试过非交互使用的情况)。

    至于从终端读取的时候,它使用的是另外一套逻辑。我尝试放一个 4100 字符的超长行时,它就在那里不停地闪啊闪啊闪啊就是没结果。不知道这部分有没有问题,反正我是没办法测试了。提问者也许可以试试直接输入超长行。

    我试过 readline(Python 者),一切正常,超长行也能较容易地输入并得到正确的解析。zsh 和 bash 等经常从管道读脚本的当然也会好好处理这些情况。

    2019-07-17 19:43:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载