Command-Line

我如何讓我的終端從過去的命令中反芻以前的輸出文本?這甚至可能嗎?

  • June 8, 2016

我剛剛執行了一項需要幾個小時的工作,但我忘記了將該文本通過管道傳輸到文本文件中。

虛擬碼:

echo [previous text output] > OutputHistory.txt

此外,我不能只是“複製和粘貼”終端中的內容,因為 1) 顯示省略了重要的格式化字元,如“\t”,以及 2,我可能已經關閉了終端視窗。

任何 Unix 命令都可以做到這一點嗎?

這一般是不可能的。一旦應用程序發出了一些輸出,儲存該輸出的唯一地方就是終端的記憶體中。舉一個極端的例子,如果這是 1970 年代,終端是一台硬拷貝列印機,如果沒有人輸入,輸出就不會回到電腦中。

如果輸出仍在終端仿真器的滾動緩衝區中,您也許可以將其取回,但如何做到這一點取決於終端,沒有標準方法。製表符當時可能已轉換為空格,也可能未轉換為空格。是否可以檢索格式資訊(顏色、粗體等)以及採用何種格式取決於終端。對於大多數終端,沒有簡單或萬無一失的方法來查找命令輸出的開始和結束位置。

如果您提前計劃,您可以使用 透明地記錄命令的輸出script。執行script mycommand.log mycommand可能與使用不同,mycommand 2>&1 | tee mycommand.log因為使用script,命令仍在寫入終端。

screen折衷方案是始終在or中執行長期存在的命令tmux。兩者都有辦法將回滾緩衝區轉儲到文件中,並且它們還有額外的好處,您可以在不中斷程序執行的情況下斷開會話並在之後重新連接。

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