首页 > 解决方案 > 如何访问我的 shell 或终端仿真器的输出历史记录?

问题描述

终端仿真器显然会将任何命令的一部分输出历史记录保存在缓冲区中。我们知道这一点,因为例如gnome-terminal右侧有滚动条,我们可以向后滚动并查看我们输入的命令的“历史”,但滚动行数有限。

回溯

有没有办法访问这些缓冲信息并在 shell 命令中使用它?gnome-terminal作为模拟器, 我并没有死心塌地。任何可以做到这一点的常用、功能良好的产品都可以。

我现在可以重新运行命令,即执行类似echo "$(!!)". 但这有两个限制:

这是一个示例终端会话,它说明了我想要的:

confus@confusion6 ~/devel/dmenu master $ ls
LICENSE   config.def.h  dmenu.c     dmenu_run  stest    util.c
Makefile  config.h      dmenu.o     drw.c      stest.c  util.h
README    config.mk     dmenu.1     drw.h      stest.o  util.o
arg.h     dmenu         dmenu_path  drw.o      stest.1  safe.c

confus@confusion6 ~/devel/dmenu master $ make
dmenu build options:
CFLAGS   = -std=c99 -pedantic -Wall -Os -I/usr/X11R6/include -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION="4.9" -DXINERAMA
LDFLAGS  = -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft
CC       = cc

confus@confusion6 ~/devel/dmenu master $ date
Sa May 11 16:28:08 CEST 2019

confus@confusion6 ~/devel/dmenu master $ get_output_buffer | grep -i sa  # Does not re-run the commands!
arg.h     dmenu         dmenu_path  drw.o      stest.1  safe.c
Sa May 11 16:28:08 CEST 2019

在这里,虚函数get_outpuf_buffer将访问终端的输出缓冲区并将其打印出来以stdout供进一步处理。也许有一个可以类似使用的 bash 内置功能或具有我想要的功能的终端仿真器?

标签: bashterminalbuffergnome-terminalterminal-emulator

解决方案


一种选择是在所有命令之前使用该tee工具。这样,您可以将所有输出存储在选定的文件中。请参阅下面的示例,其中我将所有输出保存到名为的文本文件中log.txt

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

您可以使用 CTRL+D 或完成后退出新BASH会话。exit


推荐阅读