我可以仅使用键盘保存先前终端命令的输出吗?

我可以仅使用键盘保存先前终端命令的输出吗?

我刚刚花了最后两个小时运行dd命令(或想象任何类似的“难以重做”的场景)来自没有 GUI 的 Live CD;我所拥有的只是我值得信赖的“多窗口”( CTRL+ALT+F#) Bash 终端。

唉,在命令过程中dd抛出了几条令人讨厌的错误消息和更多我想保留的信息。我插入了一个可以写入数据的 USB 驱动器,但是在命令运行后如何将之前的输出保存为文本文件?

如果这是一个漂亮的 GUI 中的终端模拟器,我只需使用鼠标选择文本,复制它,然后将其粘贴到文档中。如果我知道该命令会产生错误,我会首先将其输出到一个文件,但可惜的是,额外的输出令人惊讶。

如何将上一个命令的文本输出保存到文件而不重新运行该命令?这可能吗?

答案1

Linux 内核应该在相应的设备中存储 vts 的屏幕日志/dev/vcsa*[ttynum]

这就是为什么以下方法有效:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

...打印...

hey       

相应的/dev/vcsa[ttynum]设备将在屏幕上存储格式化文本的编码版本,而将/dev/vcs[ttynum]是纯转储。设备vcsa[ttynum]将编码一对字节,描述每个屏幕上的字符及其属性,以及每个逻辑页开头的字符串,指示引用的 tty行、列数数。

正如 @kasperd 指出的,我之前假设 BEL\a在每个字符之间进行编码,这是错误的,但事实上:默认的颜色组合恰好与铃铛字符一致。

出于您的目的,使用/dev/vcs[ttynum]可能是最简单的。下面我们来l看看差异:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

...印刷...

hey       $

...和...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

...印刷...

0\200\000\004h\ae\ay\a$

答案2

转到(/登录)另一个终端并运行sudo screendump N > screenoutput.txt,其中N是您想要的终端号。

我担心没有积压。如果那些虚拟控制台保留一个,我从来没有见过它。但它可以让您在该终端上看到所有内容。

相关内容