Less

從正在執行的命令分頁輸出時,較少凍結在最後一行

  • December 11, 2013

我有一個生成大量調試輸出的 CLI 應用程序,我非常需要在輸出中進行搜尋。我正在使用它,但是當我用orless到達最後一行時它會凍結。並且它僅在+之後返回生活,但這樣我就殺死了我的應用程序。j``G``Ctrl``c

分頁輸出時可以很容易地重現該問題find,只需G在執行後立即使用。

find / | less

它是一個錯誤less嗎?

Less 懶惰地讀取它的輸入。當您啟動它時,它只載入輸入的開頭(足以填滿一個螢幕)。當您向下滾動時,Less 會載入越來越多。如果您告訴 Less 移動到輸入的末尾,它會載入所有內容。如果輸入是正常文件,Less 只是簡單地尋找結尾,但是當輸入是管道時,除了讀取所有內容之外,沒有辦法到達數據的結尾。

當程序將輸入管道輸入到 Less 時,諸如G移動到文件末尾的命令僅在程序退出時返回,如果程序從不退出,這可能需要很長時間。需要顯示多行的命令可能需要等待程序生成該行。

如果^C在 Less 讀取輸入時按下,Less 會終止程序,其副作用是使其停止產生輸入。您可以瀏覽程序生成的所有輸入。

通過使程序寫入命名管道,您可以在某種程度上將 Less 與程序隔離。請注意,當程序嘗試寫入管道時,它將被阻塞,直到 Less 讀取它(就像使用管道一樣),如果您退出 Less,程序將收到 SIGPIPE 信號。

mkfifo f
myprogram >f &
less f

當輸入是命名管道時,^C當 Less 正在讀取時,Less 會暫停讀取,它不會對程序產生影響。

您可以使用命令將 Less 置於“跟隨模式”(如tail -f),F以跳轉到末尾並使後續輸入滾動。當您嘗試滾動到目前可用輸入的末尾時,就會發生這種情況;該F命令還使 Less 忘記它曾經關閉過輸入文件。該命令在 Less 啟動時less +F執行該命令F,即以跟隨模式啟動 Less。

如果您希望能夠隨意瀏覽調試輸出而不影響程序,請將調試輸出寫入文件,並在此文件上呼叫 Less。移動到文件的末尾可以獲得到目前為止的輸出,但是您可以使用F命令繼續閱讀,使用 中斷^C,並F根據需要多次閱讀更多內容。

引用自:https://unix.stackexchange.com/questions/104536