MacOS 上的 Bash 似乎不存储历史记录?

MacOS 上的 Bash 似乎不存储历史记录?

因此,我正在尝试自学 Unix,并且我将 MacOS 终端 shell 从默认的 zsh 更改为 bash,因为我学习的 Coursera 课程使用 Bash 脚本,我打算跟随的 CS 教育第一学期课程也使用 Bash 脚本。

我使用 brew install 下载了最新的 bash,并使用 chsh -s 命令将默认更改为 bash。

我注意到,当我今天尝试学习 bash 历史记录时,我的 bash 似乎没有将历史命令存储到 .bashhistory 文件中。

首先,我无法打开 bashhistory 文件,据说是因为 MacOS 的安全设置,但我刚刚注意到,一旦关闭终端,所有历史记录就都丢失了。

这是我运行的代码

apples-MacBook-Pro:~ apple$ sudo cat ~/.bash_history
sudo zsh
apples-MacBook-Pro:~ apple$ 

不用说,我的历史命令远不止这些。另外,我无法使用向上箭头来检索历史命令,至少不能检索我在关闭旧终端并打开新终端之前输入的命令,尽管我清楚地记得能够对 zsh shell 执行此操作。

顺便说一句,我相信历史记录大小设置为 500,而不是 1,这是我最初的怀疑。

apples-MacBook-Pro:~ apple$ echo $HISTSIZE
500

在此先感谢您的时间。

答案1

您的ls -l输出显示,就像上次一样,该文件归 root 所有,并且没有授予任何其他人的权限:

-rw------- 1 root staff 9 Apr 2 2021 /Users/Yichen/.bash_history

这很可能是因为你sudo -E bash以前使用过或类似的东西,在 root 的 UID 下运行 bash仍然使用您原来的 $HOME,因此它最终将 root 的历史记录写入您的主目录。(如果您没有使用 -E 选项,那么可能是 macOS 的 sudo 配置为默认保留 $HOME,在这种情况下 -H 选项可以避免此问题。)

要么删除该文件并让 bash 正确地重新创建它,要么使用sudo chown它将其所有者改回为您自己。

用于find ~ -user root -exec ls -ld {} \;查找可能受到类似影响的其他文件。

相关内容