【问题标题】:How can I access the output history of my shell or terminal-emulator?如何访问我的 shell 或终端仿真器的输出历史记录?
【发布时间】:2019-09-29 04:16:49
【问题描述】:

终端模拟器显然会将任何命令的一部分输出历史记录保存在缓冲区中。我们知道这一点,因为,例如在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 内置功能或具有我想要的功能的终端模拟器?

【问题讨论】:

  • 你能从你的.bashrc 运行script 吗?见unix.stackexchange.com/q/200637/133219。还有 google tmux、screen 和 xclip。
  • script 有一个小缺点,你不能做像cat script 这样的事情,基本上是写一个无限大小的文件并阻塞shell。它还会复制数据而不是在已经存在的回滚缓冲区上绘图。据我所知, tmux 和 screen 不会从正在运行的 shell 中授予缓冲区访问权限。但是这个建议很好。我不知道script
  • 好吧,那么xclipxsel 是我最后的想法了。祝你好运:-)!

标签: bash terminal buffer gnome-terminal terminal-emulator


【解决方案1】:

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

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

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

【讨论】:

  • 不是在谈论命令历史,我在谈论输出历史。请仔细阅读。
  • 对不起,你是对的......我误读了这个问题。我用一个希望更有用的答案修改了我的答案。
  • 谢谢,这是一个解决方案,耶! :-) 但是有点遗憾,必须用 tee 复制输出,这是一个额外的手动步骤。我更喜欢内置在 bash 或终端模拟器中的东西,并且无需记住以不同方式启动终端。
猜你喜欢
  • 1970-01-01
  • 2012-04-25
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2010-12-21
  • 2019-12-24
相关资源
最近更新 更多