Shell 如何(从脚本)向zsh命令历史添加内容?

Shell 如何(从脚本)向zsh命令历史添加内容?,shell,history,zsh,Shell,History,Zsh,我希望能够查看我的命令历史记录,并了解我发出各种命令的上下文——换句话说,“我在哪个目录中?”我可以通过各种方式实现这一点,但所有这些(我可以想到)都需要操纵zsh历史记录,以添加(例如)一条注释行,其中包含$(pwd)。(我可以创建名为cd&pushd&popd等的函数,或者我可以使用zsh的preexec()函数,也可以使用它的periodic()函数,最多每X秒添加一次注释行,就在我发出命令之前,或者可能还有其他方法。) 问题是,我不想直接操作历史文件并绕过shell的历史机制,但我想不出

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


问题是,我不想直接操作历史文件并绕过shell的历史机制,但我想不出一种方法(例如,使用fc命令)在没有在命令行上实际键入的情况下向历史添加一些内容。我该怎么做呢?

您可以使用
print-s
命令(请参见
manzshbuiltins
)向历史记录中添加任何您想要的内容。您还可以创建一个名为
zshaddhistory
(请参见
manzshmisc
)的钩子函数,该函数可以在创建历史记录内容时对其进行操作


请参阅以获取灵感。

您的目录更改会转到该历史记录-当您登录时,您就在$HOME-使用一个无限长的历史记录文件,您始终可以解析您所在的目录是的,谢谢,但这可能会很麻烦。如果我键入cd/some/path/to/some/where,那么几乎立即键入一个命令就可以了。但是在我会有很多cd..、popd等命令,我想知道的命令在某些情况下在目录更改后可能会有100个或更多。我正在寻找一些可以让我快速轻松地看到我发出命令时所处位置的命令。@Kimvai对通过cour可能发生的所有事情都有很狭隘的看法se的命令行会话。脚本可以将您放在完全不同的目录中。您肯定不建议也解析这样的脚本吗?有没有办法将其添加到父进程的shell中?当我将其放入子shell时,这不起作用:
(print-s--“#hi$(date)”)