Bash

閱讀終端中顯示的所有內容

  • September 4, 2020

我正在創建一個將內容寫入終端的終端應用程序。為了測試它,我真的應該測試終端中實際顯示的內容。有沒有辦法以某種方式讀取終端中實際顯示的數據?

終端必須是某處的某個文件或某物,因此必須有某種方法可以讀取那裡的內容。

cat /dev/tty

似乎給了我一個在那裡的數據流..但我不想看到擊鍵,只是我寫的。

一種選擇是在tee您要跟踪的所有命令之前使用該工具。這樣,您可以將所有輸出儲存在選定的日誌文件中。

請參閱下面的範例,其中我將所有bash輸出保存到名為的文本文件中log.txt

bash | tee log.txt
echo 'hello world'
ls
exit
cat log.txt

CTRL+D完成後,您可以使用 a或簡單地鍵入exit(如上例所示)退出新的 BASH 會話。

如果您只是在尋找實際傳遞給終端的命令(我不清楚這是否是原始問題所需要的),您總是可以執行history或檢查~/.bash_history

一些終端程序提供螢幕轉儲(例如xterm),但大多數不提供(參見Existing command line text on screen to file? (non-graphical Linux)例如)。您可以使用 gimp 等工具製作螢幕截圖,但這不會告訴您實際字元是什麼。為了發展,我需要知道這一點。

我會使用script將輸出記錄到typescript. 您可以cat將其返回螢幕(或使用less -R,如果轉義序列足夠簡單)。對於更複雜的事情或較長的痕跡,我使用其他工具:

  • slowcat放慢cat進度
  • vile-pager將轉義過濾為可讀形式(優於**less**-顏色序列跨行工作,但仍僅限於單行游標移動)。這是一個使用vi-like-emacs的過濾器,通過一個特殊用途的實用程序

為了說明差異,這裡是在我的一台 Debian 機器上執行less -rtypescript文件的螢幕截圖:apt-get update

在此處輸入圖像描述

相反,vile-pager突出顯示文本被覆蓋的地方:

在此處輸入圖像描述

無論哪種方式(更少或惡意),如果您的應用程序在螢幕上移動游標,查看輸出的唯一方法是使用 cat/slowcat/etc。

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