【问题标题】:What is the format of shell history filesshell历史文件的格式是什么
【发布时间】:2016-03-13 01:52:22
【问题描述】:

我的~/.zsh_history 显示:

: 1449561637:0;echo "foobar"

我猜是 unix timestamp : exit code ; command 但是时间戳和第一个冒号之前的空格呢?

有官方规范吗?

【问题讨论】:

  • 请注意 bash 有不同的格式。它只有你运行的命令。
  • 我相信没有官方规范。它没有记录,但很容易理解。
  • @alnet 您可以在bash 中设置HISTTIMEFORMAT 以使用时间戳标记每个条目。
  • 官方没有,因为每个shell都会实现自己的历史文件格式。

标签: bash shell unix zsh history


【解决方案1】:

正如 cmets 中已经指出的,历史文件的格式取决于 shell,有时甚至取决于 shell 的特定设置。

在您的情况下,您使用 zsh 并启用了 EXTENDED_HISTORY 选项(通过显式设置或使用 csh-emulation)。根据ZSH manualEXTENDED_HISTORY的历史条目格式如下:

: <beginning time>:<elapsed seconds>;<command>

所以时间戳之前的空格只是格式的一部分,第二个冒号和分号之间的数字实际上是命令所用的时间,而不是退出代码。

注意:如果设置了INC_APPEND_HISTORY 选项,&lt;elapsed seconds&gt; 将始终为0,因为输入命令后会立即将历史条目写入文件。如果您想记录持续时间并继续在 shell 会话之间共享历史记录,您可能需要改用 INC_APPEND_HISTORY_TIME。只有在命令完成后才会写入历史文件。

【讨论】:

  • 如果设置了INC_APPEND_HISTORY_TIME,这是否意味着不退出(或崩溃)的命令不会被写入历史文件?我希望有一种方法可以两全其美。能够显示每个命令需要多长时间,同时保证所有命令都存在
  • @MaxCoplan 只要命令以任何方式退出,让您返回到 shell 提示符(正常退出、错误代码、分段错误等)zsh 会将命令附加到历史文件.只有当 shell 本身也退出(关闭终端窗口、关闭等)时或之后,zsh 可能无法写入条目。可以通过preexec 和/或precmd 挂钩写入/编辑历史文件来解决此限制。但这可能需要一些努力,特别是如果它应该与多个并行 zsh 会话一起使用。
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多