2017-08-02 81 views
1

這個問題純粹是出於好奇;沒有問題需要解決。控制檯/外殼緩存/恢復如何工作?

注:我在CentOS 7

使用的Konsole當我ssh來遙控盒,離開會議停用一段時間,超時。作爲一種解決方法,我使用less [some-file]來保持會話處於活動狀態。

很明顯,當我在一天結束時暫停虛擬機時,會話仍然會中斷。

第二天,當我開始一個新的SSH會話時,一切正常,除了,某些Konsole功能不起作用(即清除回滾,我用了很多)用於SSH的同一個終端窗口會話。

不過,我less文件並退出後,發生兩件事情:

  1. 的Konsole重新開始正常工作。
  2. 無論我在使用less之前終端中的輸出是否被替換爲前一天輸出的任何內容,在會話被關閉之前我正在通過SSH進行關閉。

奇怪的是,這發生在所有〜4個併發終端/會話(每個會話都從前一天恢復輸出)。 [編輯:澄清:當我在特定終端中使用SSH/less時,〜4終端中的每一個都表現出這種行爲。每個人從前一天恢復輸出。這樣做在一個終端/會話是而不是影響其他終端/會話]

我認爲這將發生在任何終端應用程序(如vi,納米等)與自己的「貴」,而不是具體到less

似乎有一些緩存正在進行。我假設退出less(或vi,nano等)會觸發某種類型的shell輸出恢復,但這種特殊的表現看起來有點奇怪。

任何想法是怎麼回事?

+0

有你/應用程序之間可以在終端上,如果我是正確的切換幾個緩衝區。但我不記得那些機制的實際名稱,所以我無法提供更多幫助。但我也會對答案感興趣! – Jakuje

回答

1

在問題的備用屏幕特徵描述的終端特徵(最初xterm,但複製/由多個其它終端,包括konsole模仿)。根據終端描述,您可能會/可能不會使用此功能。作爲這樣vi

less和最全屏終端程序發送轉義序列,如果他們在終端描述正在定義爲從備用屏幕切換到/(即,TERM=xterm)。

從描述中,聽起來好像您在konsole的同一個實例中使用了不同的選項卡,並且它記住您的終端已設置爲備用屏幕。 konsole和其他一些程序試圖在停止時保存/恢復「會話」信息,以便保存/恢復可能看起來很不錯。

在備用屏幕中,終端程序通常很少或無法訪問回滾區域。

您可以使用tput發送相同的轉義序列(不運行less):

tput rmcup 

(如果終端描述並不的一個定義,它會做什麼)。

延伸閱讀: