Mac 上的终端会话之间不保留 Bash 历史记录

39 unix terminal bash history macos

我的 bash 历史神秘地停止工作,我不知道如何修复它。这是我的 .bashrc 的样子:

HISTSIZE=500
HISTFILESIZE=500
HISTFILE=$HOME/.bash_history
Run Code Online (Sandbox Code Playgroud)

但是,当我运行echo $HISTFILE它时会打印出来/Users/myusername/.bash_sessions/EE8689E5-7DAD-4018-817E-0AF1DE36082A.historynew

我是 .bash_history 文件的所有者,所以我不太确定我将如何解决这个问题。

谢谢!

dii*_*eep 29

终端为每个终端会话分配一个唯一标识符并通过 TERM_SESSION_ID 环境变量进行通信,以便在终端中运行的程序可以在启用恢复的情况下退出和重新启动终端时保存/恢复特定于应用程序的状态。

一个新文件夹 (~/.bash_sessions/) 用于存储会话独有的 HISTFILE 和 .session 文件。

在 shell 启动期间,会话文件被执行。旧文件会定期删除。

默认行为安排为每个恢复的终端会话独立保存和恢复 bash 命令历史记录。它还将命令合并到新会话的全局历史记录中。

您可以通过设置禁用此行为并共享单个历史记录

export SHELL_SESSION_HISTORY=0
Run Code Online (Sandbox Code Playgroud)

如果定义了 HISTTIMEFORMAT,则默认情况下禁用每个会话的历史记录(在 /private/etc/bashrc_Apple_Terminal 中了解更多信息)

如果存在以下文件,则禁用保存/恢复机制:

~/.bash_sessions_disable
Run Code Online (Sandbox Code Playgroud)

自 El Capitan 发布以来,Apple 已经改变了一些行为,因此最好在此处阅读更多相关信息 less /private/etc/bashrc_Apple_Terminal

  • 但不要只是从禁用保存/恢复机制开始。如果您在 shell 命令历史记录方面遇到问题,请尝试解决该问题。`~/.bash_sessions_disable` 文件是万一出现无法具体解决的问题的最后手段。它不仅禁用每个会话的命令历史记录,您还可以仅禁用每个会话的命令历史记录。有关详细信息,请参阅`/etc/bashrc_Apple_Terminal` 中的注释。 (3认同)

小智 6

在 El Capitan 升级后,我注意到了类似的情况。只需将文件.bash_sessions_disable文件添加到您的主目录中即可禁用新的 bash 会话和.bash_history重新使用。

这个Reddit 线程有更多信息和更多链接。


小智 5

您可以通过更新到最新的 RVM 版本或执行以下操作来解决 RVM 问题:

  echo 'shell_session_update' > $HOME/.bash_logout
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅https://github.com/rvm/rvm/issues/3540


the*_*en8 1

如果它是 Mac,我想它的默认登录 shell 是bash并且它运行.profile而不是.bashrc. 所以,您编辑了错误的文件。