linux - cat命令能够读取的文本长度是否存在限制?
PHPz
PHPz 2017-04-17 11:49:22
0
1
777

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

PHPz
PHPz

学习是最好的投资!

全部回覆(1)
PHPzhong

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

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

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!