在bash中为每个工作目录创建历史日志

taf*_*kje 6 bash command-history working-directory

我想知道是否可以为每个当前工作目录保留一个包含历史记录的文件。因此,例如,如果我正在工作/user/temp/1/并键入一些命令,这些命令将被保存在/user/temp/1/.his或其他地方。我正在使用 bash。

小智 5

根据Groggle提供的答案,您可以在您的 ~/.bash_profile 中创建一个替代 cd (ch)。

function ch () {
    cd "$@"
    export HISTFILE="$(pwd)/.bash_history"
}
Run Code Online (Sandbox Code Playgroud)

每次调用 ch 时自动导出新的 HISTFILE 值。

bash 中的默认行为仅在您结束终端会话时更新您的历史记录,因此仅此一项就可以将历史记录保存到 .bash_history 文件中,无论您是从哪个文件夹中结束会话。这篇文章中提到了一个解决方案,并在此页面上进行了详细说明,允许您实时更新您的 HISTFILE。

一个完整的解决方案包括在您的 ~/.bash_profile 中再添加两行,

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
Run Code Online (Sandbox Code Playgroud)

更改历史模式以附加第一行,然后配置历史命令以在每个提示下运行。

  • 您应该注意到这种配置是非常危险的。迟早你会在公开的档案或存储库中泄露一些机密命令。在多用户机器上,只要您切换到另一个用户的目录并在那里运行一些命令,他们就可以修改您的文件并可能获得您帐户的后门。其他用户,或您下载档案的人,可以通过将命令注入到您的 shell 历史记录中来轻松地诱使您运行命令。 (3认同)