首頁  >  問答  >  主體

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

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

PHPzPHPz2742 天前779

全部回覆(1)我來回復

  • PHPz

    PHPz2017-04-17 11:51:22

    cat 能夠讀取的文字長度沒有限制。而且 cat (預設參數)根本不管檔案有多少行;它只是在不斷地複製資料而已。

    問題出在 mongo shell 使用的 linenoise 函式庫。在<mongo>/shell/linenoise.cpp:2541 (不同版本可能有差異)處,如果不是從終端獲取數據,linenoise 總是按每行最多4096 字節(UTF-8)來取,所以mongo 讀到了被斷開的行(linsenoise 根本沒考慮過它這樣做會把某些行斷開;也許他們根本沒有測試過非交互使用的情況)。

    至於從終端機讀取的時候,它使用的是另外一套邏輯。我嘗試放一個 4100 字符的超長行時,它就在那裡不停地閃啊閃啊閃啊就是沒結果。不知道這部分有沒有問題,反正我沒辦法測試了。提問者也許可以試試直接輸入超長行。

    我試過 readline(Python 者),一切正常,超長行也能較容易地輸入並得到正確的解析。 zsh 和 bash 等經常從管道讀取腳本的當然也會好好處理這些情況。

    回覆
    0
  • 取消回覆