膩子“可列印輸出”日誌記錄列印所有輸入鍵/字元
我在我的 Windows PC 上使用 Putty。我注意到使用 Putty 的預設“可列印輸出”日誌創建的日誌文件將記錄所有按鍵,即使是我已刪除的按鍵。
例如,如果我想輸入
abcd
,但我輸入錯誤為abvd
,然後按兩次退格鍵刪除vd
,然後重新輸入cd
,則日誌文件將輸出為abvdcd
。如何更正日誌文件以僅在按 Enter 鍵後顯示輸入,以便正確顯示abcd
在日誌文件中?**注意:**我無法在我的 Windows PC 上安裝任何外部軟體,因此希望有一種方法可以在 Windows 上解決此問題。我也沒有任何程式背景。
我認為你不應該看到
abvdcd
- 在我的測試中我得到了abvd cd
。假設 SSH(這是大多數人使用 Putty 的目的)你不能。它將每個鍵入的字元立即發送給主機,主機進行行編輯。對於這個例子:
- 你輸入 abc d。Putty 將這些字元發送到主機,主機將它們放入緩衝區並將它們回顯給 Putty,Putty 將它們顯示在螢幕上並記錄它們。
- 你輸入兩個退格鍵。Putty 將這些發送到主機,主機從緩衝區中刪除兩個字元;對於每個字元,它(通常?)回顯退格空格退格,並且當 Putty 將此序列放到螢幕上時,它具有視覺擦除兩個字元並將游標留在第一個字元的淨效果,即在“ab”之後。Putty 也會按照配置記錄;如果您有“所有輸出”並使用顯示不可見控製字元的工具查看文件,您應該會看到整個序列,但“可列印輸出”僅記錄空間。
您可能正在使用使用其他方法來顯示退格效果的主機,例如退格擦除行或退格擦除字元(1)。
- 你輸入 cd; Putty 將它們發送到主機,主機將它們添加到其緩衝區並將它們回顯到顯示和記錄它們的 Putty。
- 您鍵入 return,Putty 將其發送到主機,這與Putty 顯示和記錄的 CR*和LF 相呼應。*主機還處理現在的輸入緩衝區(‘abcd’),這可能會產生一些輸出。
如您所見,所有這些字元(abvd
$$ BS $$SP$$ BS $$ $$ BS $$SP$$ BS $$cd CR LF) 實際上是從主機傳來的,Putty 無法區分有些應該記錄,有些不應該記錄。如果您至少在我的 CentOS 上在 Unix 上使用 line-kill(通常是 ^U),它會根據需要回顯(並記錄)多個退格,然後擦除剩餘行(這是 ESCape [ K,其中序列 ESC [ 也是稱為 CSI 命令序列介紹器)。 如果您使用 ‘all’ 登錄並且有 Unix 或類似 Unix 的實用程序可用,您可以執行該文件,並在必要時
col -b
加上類似的東西以獲得“最終顯示的結果”。sed 's/\x1b\[[0-9]*[A-Z]//'
這也將修復任何(其他)主機輸出,這些輸出試圖使用像 man 和 nroff 喜歡做的事情那樣過度使用,並且幾十年前在列印終端上通常工作得很好。如果您使用的是 Telnet,Putty 也支持但大多數主機不再這樣做,因為它不安全,預設情況下該協議的行為方式相同,但它確實可以選擇在發送前在客戶端完成行編輯。我不知道 Putty 是否支持這個選項,以及如果任何主機仍然支持的話——IME 它曾經主要在像 IBM Univac GE 這樣的“大鐵”大型機上流行,如今幾乎沒有人直接使用。