我可以只使用键盘保存上一个终端命令的输出吗?

IQA*_*eas 12 linux terminal console

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

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

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

如何在不重新运行命令的情况下将上一个命令的文本输出保存到文件中?这甚至可能吗?

mik*_*erv 15

一个 linux 内核应该在相应的/dev/vcsa*[ttynum]设备中为你的 vts 存储一个屏幕日志。

这就是为什么以下工作:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2
Run Code Online (Sandbox Code Playgroud)

...打印...

hey       
Run Code Online (Sandbox Code Playgroud)

相应的/dev/vcsa[ttynum]设备将在屏幕上存储格式化文本的编码版本,而/dev/vcs[ttynum]将是一个普通的转储。该vcsa[ttynum]装置将编码的一对描述每个屏幕上的字符和它的属性,以及在表示所引用的TTY的每个逻辑页面的头部的串的字节线,柱计数。

正如@kasperd 指出的那样,我之前假设\aBEL 是在每个字符之间编码的,但实际上是错误的:默认颜色组合恰好与钟字符重合。

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

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l
Run Code Online (Sandbox Code Playgroud)

...印刷...

hey       $
Run Code Online (Sandbox Code Playgroud)

...和...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l
Run Code Online (Sandbox Code Playgroud)

...印刷...

0\200\000\004h\ae\ay\a$
Run Code Online (Sandbox Code Playgroud)


The*_*kin 3

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

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