我正在创建一个终端应用程序,将内容写入终端。为了测试它,我真的应该测试终端中实际显示的内容。有没有办法以某种方式读取终端中实际显示的数据?
终端必须是某个地方的某个文件或其他东西,因此必须有某种方法来读取那里的内容。
cat /dev/tty
似乎给了我那里的数据流......但我不想看到击键,只是我写的内容。
答案1
一些终端程序提供屏幕转储(例如xterm),但大多数没有(参见屏幕上现有的命令行文本要保存到文件中吗? (非图形Linux)例如)。您可以使用 gimp 等工具进行屏幕截图,但这不会告诉您实际的字符是什么。为了发展,我需要知道这一点。
我用来script
将输出记录到typescript
.您可以cat
将其返回到屏幕(或者使用less -R
,如果转义序列足够简单)。对于更复杂的事情或长痕迹,我使用其他工具:
slowcat
减慢cat
进度vile-pager
将转义过滤成可读的形式(比less
— 颜色序列跨行工作,但仍仅限于单行光标移动)。这是一个过滤器使用类似 vi 的 emacs,通过特殊目的公用事业。
为了说明差异,下面是在我的一台 Debian 机器上运行的文件less -r
的屏幕截图:typescript
apt-get update
相反,vile-pager
突出显示文本被覆盖的位置:
无论哪种方式(较少或卑鄙),如果您的应用程序在屏幕上移动光标,则查看输出的唯一方法是使用 cat/slowcat/etc。
答案2
tee
一种选择是在要跟踪的所有命令之前使用该工具。这样,您可以将所有输出存储在选定的日志文件中。
请参阅下面的示例,其中我将所有bash
输出保存到名为的文本文件中log.txt
:
bash | tee log.txt
echo 'hello world'
ls
exit
cat log.txt
完成后,您可以使用CTRL+D
或简单地键入(如上例所示)退出新的 BASH 会话。exit
如果您只想查找实际传递到终端的命令(我不清楚这是否是原始问题所期望的),您始终可以运行history
或检查~/.bash_history
答案3
PARAMETER_EMMC=10
while [ $PARAMETER_EMMC -eq 10 ]
do
read -u $USBFPI -r -n 3000 -t .3 text
if [[ $text == *"text read from USB"* ]]; then
Execute
fi
done