我如何让我的终端从过去的命令中反刍以前的输出文本?这甚至可能吗?

Tom*_*Tom 3 command-line terminal pipe history

我刚刚运行了一项需要几个小时的工作,但我忘记将该文本通过管道传输到文本文件中。

伪代码:

echo [previous text output] > OutputHistory.txt
Run Code Online (Sandbox Code Playgroud)

此外,我不能只是“复制和粘贴”我的终端中的内容,因为 1) 显示省略了重要的格式化字符,例如“\t”,并且 2,我可能已经关闭了终端窗口。

任何Unix命令都可以做到这一点吗?

Gil*_*il' 5

这在一般情况下是不可能的。一旦应用程序发出了一些输出,该输出的唯一存储位置就是终端的内存中。举一个极端的例子,如果这是 1970 年代的终端是硬拷贝打印机,如果没有人输入,输出就不会返回到计算机中。

如果输出仍在终端仿真器的滚动缓冲区中,您也许可以将其取回,但如何执行取决于终端,没有标准方法。此时制表符可能已转换为空格,也可能未转换为空格。是否可以检索格式信息(颜色、粗体等)以及采用何种格式取决于终端。对于大多数终端,没有简单或万无一失的方法来找到命令输出的开始和结束位置。

如果您提前计划,您可以使用 透明地记录命令的输出script。运行script mycommand.log mycommand可能与mycommand 2>&1 | tee mycommand.log因为 with不同script,命令仍在写入终端。

妥协是始终在screen或 中运行长期存在的命令tmux。两者都有一种将回滚缓冲区转储到文件的方法,而且它们还有一个额外的好处,即您可以断开与会话的连接,而不会中断程序的执行并在之后重新连接。