如何让我的终端重新显示过去命令的先前输出文本?这可能吗?

如何让我的终端重新显示过去命令的先前输出文本?这可能吗?

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

伪代码:

echo [previous text output] > OutputHistory.txt

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

这可以用任何 Unix 命令实现吗?

答案1

这一般来说是不可能的。一旦应用程序发出一些输出,存储该输出的唯一位置就是终端的内存中。举一个极端的例子,如果现在是 20 世纪 70 年代,终端是硬拷贝打印机,那么如果没有人输入,输出就不会返回计算机。

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

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

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

答案2

仅当终端应用程序将原始输出存储到某处的文件中(例如iTerm启用日志记录时),或者某些其他日志记录应用程序(autoexpect(1)或等效程序)正在保存输出时,原始输出才可用。通常这必须提前设置,并且需要管理,例如,如果有人离开yes运行一段时间,那么磁盘空间到哪里去了?

相关内容