【问题标题】:Mac Terminal history - commands with past resultsMac 终端历史 - 具有过去结果的命令
【发布时间】:2017-02-08 16:06:08
【问题描述】:

我一直在我的 Mac (dev/prod) 中使用两个终端窗口,两者都显示了过去 6 个月工作的命令和结果历史记录(向上滚动),这对于运行定期命令和检查过去的错误。

昨天我关闭了我的 mac 并手动关闭了两个终端窗口,但今天打开终端时它根本没有历史记录。有没有办法恢复带有过去命令及其结果的所有历史记录的窗口?

我知道有一个 .bash_history 文件,但它只显示键入的命令而不显示结果。
提前致谢。

【问题讨论】:

  • 正如您提到的,只有命令历史记录存储在 bash_history 中。他们的响应不会存储在任何地方。你用时光机吗?如果是的话,不妨回去几天看看能不能看到这段历史。

标签: macos terminal


【解决方案1】:

Bash 的历史记录只存储已执行的命令,而不是它们的输出,并且只存储有限数量的命令(通常为 500 个,由环境变量 HISTFILESIZE 定义)。这对你的情况没有帮助。

据我所知,终端存储似乎将窗口的状态(包括控制台历史记录)保存在目录/Users/<user>/Library/Saved Application State/com.apple.Terminal.savedState/ 中。每当终端窗口中发生新事件时,都会实时修改此目录中的文件,除非我弄错了,否则应该将其包含在 Time Machine 备份中。因此,似乎如果您可以从以前的备份中恢复此目录中的文件,您应该取回您的历史记录。您甚至可以在该目录中尝试一些“文件取消删除”工具,尽管这些工具在 OS X 上相当少见。

此过程应该是您首先退出终端,然后恢复整个目录(例如使用 Time Machine),然后简单地启动终端。这些保存的状态文件使用自定义二进制格式,只有终端程序本身才能读取。

顺便提一下,您可以随时从 Shell 菜单将终端窗口的内容保存到文本文件中。鉴于您的终端历史似乎具有重要价值,您可能会考虑在未来定期执行此操作...

【讨论】:

  • 谢谢。您知道如何在终端窗口或任何其他应用程序中加载“window.data”文件吗?我在您提到的本地目录中找到了 3 个文件('data.data'、'window_1.data'、'window_4.data')。我注意到每当我打开一个新的终端窗口时,都会创建一个新的“window_X.data”文件,并在我关闭该终端时将其删除。由于我现在只打开了 1 个终端窗口并且有 3 个数据文件,可能其他的有我以前的历史记录。
  • 这些数据文件似乎使用自定义二进制格式。我曾尝试对其进行逆向工程,但没有成功。我不认识常见的压缩方案。没有我知道的解析器。
  • 我知道有效加载其中一个文件的唯一方法是将它放在那里,然后启动终端...
  • 我有充分的理由相信这些数据文件是使用 Apple 的 NSCoder 的子类生成的,可能是一些“存档”编码器。如果您愿意编写一些 Objective C 或 Swift 代码,您可能会成功解码文件。如果您想以这种方式进行调查,请在 Google 上搜索 unarchiveObjectWithData...
猜你喜欢
  • 1970-01-01
  • 2012-09-10
  • 2015-02-05
  • 2017-05-25
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多