bash - 如何访问我的 shell 或终端仿真器的输出历史记录?
问题描述
终端仿真器显然会将任何命令的一部分输出历史记录保存在缓冲区中。我们知道这一点,因为例如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 内置功能或具有我想要的功能的终端仿真器?
解决方案
一种选择是在所有命令之前使用该tee
工具。这样,您可以将所有输出存储在选定的文件中。请参阅下面的示例,其中我将所有输出保存到名为的文本文件中log.txt
:
bash | tee log.txt
echo 'hello world'
cat log.txt
您可以使用 CTRL+D 或完成后退出新BASH
会话。exit
推荐阅读
- r - 在 ShinyR 中选择后如何重置表单?
- c# - 如何在 Windows 窗体中保存对象的状态
- ionic-framework - 如何在离子框架中直接导航到主页而不是 index.html?
- tensorflow - 在 mAP 不稳定的情况下,我应该何时停止目标检测模型训练?
- javascript - 将 setInterval 设置为多次调用,但在本机反应中只调用一次
- fortran - 是否可以使用名称按数字顺序排列的向量进行循环?
- c++ - 为什么下面的代码不能编译(c++中的继承)
- python - Python 脚本突然从 PC 和 Dropbox 中消失了……?
- java - 为什么 describeConstable 是可选的?
- javascript - 如何使用 ReactJs 通过`props items` 实现`Search box`