终端仿真器显然会将任何命令的输出历史记录的一部分保存在缓冲区中。我们知道这一点,因为在gnome-terminal
中,右侧有滚动条,我们可以向后滚动并查看输入的命令的“历史记录”,其中包含有限的滚动行。
是否可以通过shell命令访问此缓冲的信息并使用它?
我对gnome-terminal
的仿真器并不陌生。可以做到这一点的任何常用的,体面的功能都可以。
我现在可以重新运行该命令,即执行类似echo "$(!!)"
的操作。但这有两个限制:
date
)这是一个示例终端会话,它说明了我想要的:
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内置功能可以类似使用,或者具有我想要的功能的终端仿真器?
答案 0 :(得分:1)
一种选择是在所有命令之前使用NAME READY STATUS RESTARTS AGE
hello-kerb-6f744b6cc5-x6dw6 1/1 Running 0 6m
工具。这样,您可以将所有输出存储在选定的文件中。请参见下面的示例,在该示例中,我将所有输出保存到名为tee
的文本文件中:
log.txt
完成后,您可以使用CTRL + D或bash | tee log.txt
echo 'hello world'
cat log.txt
退出新的BASH
会话。