【发布时间】:2015-02-05 15:15:31
【问题描述】:
我知道我前几天输入了一个命令,但现在我无法使用history 或 .bash_history 找到它。任何想法为什么会发生这种情况?我怀疑这与在我的 OS X 终端中使用多个选项卡有关,并且不知何故历史不会在选项卡之间延续,但我不知道。
【问题讨论】:
标签: macos unix command-line terminal
我知道我前几天输入了一个命令,但现在我无法使用history 或 .bash_history 找到它。任何想法为什么会发生这种情况?我怀疑这与在我的 OS X 终端中使用多个选项卡有关,并且不知何故历史不会在选项卡之间延续,但我不知道。
【问题讨论】:
标签: macos unix command-line terminal
我的终端遇到了这个问题。事实证明它正在保存到~/.bash_sessions 文件夹中新生成的文件中。这是 /etc/bashrc_Apple_Terminal 文件中概述的 El Capitan 引入的管理 bash 会话的新方法的一部分。 echo $HISTFILE 的输出证实了这一点。要禁用此行为,只需运行 touch ~/.bash_sessions_disable。然后退出终端应用程序并重新启动它。它现在应该正确保存历史记录,可以通过echo $HISTFILE 再次确认。我希望这会有所帮助!
【讨论】:
从 OS X El Capitan 10.11 开始,默认情况下,Bash 配置为为每个终端保存单独的命令历史记录,因此可以单独恢复它们以进行恢复。
当 shell 退出时,每个单独的历史记录也会附加到 ~/.bash_history 中的全局历史记录中。如果你退出终端然后重新打开它——无论是否启用了恢复——你应该会发现来自每个终端的命令都在 ~/.bash_history 中。如果您启用了 Resume,每个恢复的终端将只包含其恢复的历史记录,但当您创建一个新终端时,它将以最新的全局历史记录开始。
由于所有命令历史记录都附加到全局 ~/.bash_history 文件中,您可能希望通过设置 HISTFILESIZE 环境变量来增加存储的命令数量,以便最新的终端历史记录不会推送其他终端历史记录过早退出文件。默认值为 500。我的设置为 10,000。我还将HISTSIZE 设置为10,000,这样我就可以浏览整个历史记录(否则,只会从历史记录文件中读取最后的500 个)。
在 OS X El Capitan 10.11 及更高版本中,安排单独命令历史记录的脚本位于 /etc/bashrc_Apple_Terminal 中。它包含大量的 cmets,描述了该机制的工作原理,以及如何自定义或禁用它。
【讨论】:
这一直发生在我身上。我打开多个命令窗口,历史记录按它们关闭的顺序保存。您正在查找的命令可能已被另一个命令窗口覆盖。
【讨论】:
我很确定这是一个错误。我登录了一个访客帐户,因此配置文件是原始的。在主目录中,我做了:
touch .bash_history 然后tail -f .bash_history 查看命令何时保存。
当终端会话关闭时,命令应该保存到全局.bash_history 文件中。我发现至少有一半的时间,关闭终端后命令没有保存到文件中。什么时候会发生什么时候不会发生,这似乎很随机。它似乎也出现了连续多次,然后又变得片状的条纹。如果我使用 exit 而不是 Command-W 退出终端会话,它似乎每次都有效。
【讨论】:
exit 并注意到没有任何东西被写入.bash_history。找到这篇文章后,我尝试使用 command-W 关闭一个窗口。突然间一切正常,无论我如何关闭窗口。
在我的例子中,当我输入 history 时,它只显示最新的 16 个命令。但是,我可以通过 Ctrl+R 调用较旧的命令,所以我知道命令历史实际上更长。
截至 2021 年,命令历史记录位于名为 .zsh_history 的文件中:
cd ~
list -al
你可以用vi打开它:vi .zsh_history,然后搜索你的命令。
【讨论】: