我用cat命令分行读取js文件,将其中内容传递给mongo时,如果单行文本过长,则往往会出现“unexpected identifier"之类的错误,但是用mongo直接处理js文件时则没有这类问题。
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 等經常從管道讀取腳本的當然也會好好處理這些情況。