如何使用ANSI转义码保存GNOME终端内容?


9

VT100终端有一个相对简单的方法,可以使用- 将带有转义码的终端内容保存到文件中:Metap

XTerm.VT100.printAttributes: 2
XTerm.VT100.printerCommand: cat - > file
XTerm.VT100.translations: #override Meta <KeyPress> P: print() \n

我已经四处查看了,找不到在默认的GNOME终端+ XTerm + Bash中工作的解决方案。

希望仅包含窗口内容的图像。

看起来GNOME Terminal可能最终可以解决此问题,但没有有关它将包含在哪个版本中的信息,距上次更新已经快三年了...


不幸的是,根本没有办法做到这一点。请参阅:askubuntu.com/q/20739
Zaz

@Josh我不认为这是同一个问题。我不想保存命令的所有输出,而是保存“终端”窗口中的所有可见输出。
13年

Answers:


3

不幸的是,开箱即用的答案是:这是不可能的。

在我的另一个答案中,我列出了如何使用脚本来执行此操作,尽管您指出了一些区别。另一种方法是编译源代码或使用不稳定版本。

侏儒终端源Tarball

Raring中的版本为3.6.1,因此您可以查看此源。在115行的Terminal-window.c内部:

/*
 * We don't want to enable content saving until vte supports it async.
 * So we disable this code for stable versions.
 */

#include "terminal-version.h"

#if (TERMINAL_MINOR_VERSION & 1) != 0
#define ENABLE_SAVE
#else
#undef ENABLE_SAVE
#endif
#endif

选项:

  1. 在此下方添加#define ENABLE_SAVE。
  2. 修改版本为不稳定。
  3. 下载不稳定版本的.DEB。

希望这可以帮助。


这是保存ANSI转义键还是仅保存文本?
l0b0

我已经验证过,并且vte_terminal_write_contents()似乎没有写出ANSI代码,此刻,我的原始回答是最准确的“不可能(开箱即用)”。如果您是开发人员,则可以在termainal-window.c中重写该函数。3340 save_contents_dialog_on_response(...)在大约3372行,您可以看到对vte_terminal_write_contents的调用。我将不做进一步介绍,因为它超出了本网站的范围。其他终端确实以比重新编译实用程序少得多的成本提供此功能。
LimpingNinja

+100。如果可能的话,我会将其分配给您和您其他的答案,因为它们都满足我想要的90%。
l0b0

3

不幸的是,开箱即用的答案是:这是不可能的。

您可以通过两种方式尝试纠正此问题,方法是始终在终端上运行脚本并记录所有输出。打开gnome-terminal,转到编辑 -> 配置文件首选项,然后选择标题和命令,并为您的自定义命令使用以下命令:

bash -l -c 'script -q -c bash $HOME/sessionlogs/$BASHPID.sessionlog.$(date +%Y%m%d-%H%M).txt'

确保$ HOME下存在“ sessionlogs”。

另一种方法已删除,并添加为该问题的第二个答案。


确实,更正了答案以解决在重注期间发生的错字。我也分离了“重新编译”选项,因为我同意这两者是无关的。
LimpingNinja

less -r实际将输出显示为已打印-谢谢!
l0b0

0

您可以通过script(1)运行shell,以获取存储在文件中的终端的所有输入和输出,包括终端转义符。


1
那是一个不同的用例。script事实之后不能用于保存内容,它不能简单地保存可见的输出
2012年

1
你确定吗?没错,事实是它不能保存脚本,但是当我测试了该脚本并输出一些文件权限时,ll它保存了所有输出。
马特

0

有一个名为screen的软件包-具有VT100 / ANSI终端仿真的终端多路复用器。

按照的联机帮助屏幕 Ubuntu的手册网站上屏幕号称是

一个全屏窗口管理器,它在多个进程(通常是交互式外壳程序)之间多路复用一个物理终端。每个虚拟终端都提供DEC VT100终端的功能,以及ISO 6429(ECMA 48,ANSI X3)的一些控制功能。 64)和ISO 2022标准(例如,插入/删除行和对多个字符集的支持)与VT100 / ANSI终端仿真的终端多路复用器。

并且在运行屏幕时

Ctrl ah (硬拷贝)将当前窗口的硬拷贝写入文件“ hardcopy.n”。

我在GNOME终端中尝试过,运行screen并键入Ctrl ah

运行屏幕并按Ctrl Alt h

这是在Gedit中打开时,我的hardcopy.1文件的输出:

在Gedit中打开hardcopy.1

您可以在Ubuntu 13.04的raring / main软件存储库中找到该屏幕

默认情况下未安装。


-1

嗯,这不会复制转义码,而只是抓取文本,您可以进入菜单编辑->全选,然后按CtrlShiftC并(i)将剪贴板粘贴到编辑器中或(ii)键入cat > filename并按CtrlShiftV


这是一个不同的用例-如明确说明的那样,我想包括ANSI转义码。
2012年

-1

man history 寻找转义字符的历史扩展。我相信history 可以满足您的要求。


我在man页面中找不到任何相关内容。请更具体。
l0b0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.