【问题标题】:How can I (from a script) add something to the zsh command history?我如何(从脚本)向 zsh 命令历史记录添加一些内容?
【发布时间】:2011-02-18 11:05:55
【问题描述】:

我希望能够查看我的命令历史记录并了解我发出各种命令的上下文——换句话说,“我在哪个目录中?”我可以通过多种方式实现这一点,但所有这些(我能想到的)都需要操纵 zsh 历史记录以添加(例如)带有 $(pwd) 结果的注释行。 (我可以创建名为 cd & pushd & popd 等的函数,或者我可以使用 zsh 的 preexec() 函数和它的periodic() 函数最多每 X 秒添加一次注释行,就在我发出命令之前,或者可能有其他方式。)

问题是,我不想直接操作历史文件并绕过 shell 的历史机制,但我想不出一种方法(例如使用 fc 命令)在没有实际上在命令行上键入它。我怎么能这样做?

【问题讨论】:

  • 您的目录更改会转到该历史记录 - 当您登录时,您在 $HOME - 历史记录文件无限长,您始终可以解析您所在的目录
  • 是的,谢谢,但这可能很麻烦。如果我输入 cd /some/path/to/some/where 然后几乎立即输入一个可以的命令。但实际上我会有很多 cd ..、popd 等命令,而我想知道的命令在某些情况下可能是目录更改后一百个或更多。我正在寻找可以让我快速轻松查看我发出命令时所处位置的东西。
  • @Kimvais 对在命令行会话过程中可能发生的所有可能事情的看法相当狭窄。一个脚本可以把你放到一个完全不同的目录中。当然你也不建议解析这样的脚本?

标签: shell history zsh


【解决方案1】:

您可以使用print -s 命令(请参阅man zshbuiltins)将您想要的任何内容添加到历史记录中。您还可以创建一个名为zshaddhistory(参见man zshmisc)的挂钩函数,它可以在创建历史内容时对其进行操作。

请参阅my Bash history logging functions 获取灵感。

【讨论】:

  • 有没有办法把它添加到父进程的shell中?
  • 当我把它放在子shell中时这不起作用:(print -s -- "# hi $(date)")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2012-12-11
  • 2012-01-25
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多