为什么Mac上的bash历史记录无法保存?


28

我一直在使用bash进行工作,从来没有遇到过问题。现在,它不再在历史记录中保存任何命令。如果我打开一个窗口终端,请尝试一些命令,它的行为就好像一切正​​常,并使用箭头键向我显示历史记录。但是,如果我关闭窗口(并且应该将其保存在.bash_history文件中的时间)并打开另一个窗口,则没有最后命令的迹象。

我如何找出问题所在?或从空白重新设置所有内容。


可能是您的个人资料或rc文件。里面有什么?
user14492

1
.bash_history的权限和所有者是什么?我的是600个,归我所有。另外,$ HIST_FILE中有什么?
blm 2015年

@blm权限是正确的;打印我发现的有关.bash_sessions的$ HIST_FILE。显然,在会话结束时,操作系统将这些文件保存到历史文件时会出现问题。我不想再调查了,所以我只是将其放到我的家中.bash_sessions_disable,就知道它恢复了默认行为
abaini01 2015年

请考虑向Apple提交错误报告:developer.apple.com/bug-reporting
Chris Page

Answers:


31

我这样做:

.bash_profile文件添加变量

SHELL_SESSION_HISTORY=0

重新启动终端,然后按我的意愿工作。(关闭终端后,它保存了命令)

PS我也使用HISTFILESIZEHISTSIZE变量

HISTSIZE是在执行bash会话时存储在历史记录列表的内存中的行数或命令数。

HISTFILESIZE是(a)在会话启动时历史文件中允许的行或命令的数量,(b)在bash会话结束时存储在历史文件中以供将来会话使用的行数或命令数。


3
在El Capitan上添加一行适合我,谢谢。
艾丹

2
谢谢!如果有人碰巧知道,我也想知道为什么这也行得通。(History = 0会在我无知的头脑中暗示所有历史都会丢失,但似乎却产生相反的效果。)
Mike Williamson

@Sysqa是否有一些“中间”解决方案?“为每个恢复的终端会话独立保存和恢复bash命令历史记录”的功能听起来像某些程序可能会受益的好功能。有什么方法可以从以前的配置中受益,也可以从具有某种配置的新方法中受益吗?
loco.loop

8

OS X 10.11 El Capitan开始,系统安装的脚本/etc/bashrc_Apple_Terminal与Terminal配合使用,以便为恢复为Resume的每个终端保存/恢复单独的命令历史记录。

阅读中的注释,以/etc/bashrc_Apple_Terminal获取有关如何管理每终端命令历史记录以及如何对其进行自定义的说明。

如果您进行自定义,请PROMPT_COMMAND确保将其连接到先前的值,这样就不会擦除系统提供的命令:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

如果安装EXIT信号处理程序时trap一定要做类似的事情(如果您不知道如何连接到先前的值,请从处理程序中调用shell_session_update,这有点麻烦)。

退出外壳程序时,此代码会将新命令保存到中的终端历史记录~/.bash_sessions。要查看它是否遇到任何问题,可以使用exit(或Control-D)手动退出外壳,而不是关闭终端。它记录进度消息。请注意它是否尚未完成,或者是否显示任何警告或错误消息。

通常,bashrc_Apple_Terminal如果用户似乎执行了任何不兼容的自定义设置,则尝试检测和禁用每个会话的历史记录。听起来您可能已经找到了一个无法处理的问题。请考虑向Apple提交错误报告:https : //developer.apple.com/bug-reporting/


我没有做任何特殊的配置,所以我想这不是问题。您能否解释一下PROMPT_COMMAND的功能。
loco.loop

@ loco.loop您的意思是“ Bash的PROMPT_COMMAND变量是做什么/etc/bashrc_Apple_Terminal用的?”还是您的意思是“ BROM的PROMPT_COMMAND用途是什么?”?如果是后者,请参考详细记录的代码。或者,您应该对此进行另一个问答。
克里斯·佩奇

我的意思是什么PROMPT_COMMAND用于... @ChrisPage
loco.loop 17-10-22

@ loco.loop我请您参考Bash文档,或建议您开始对此进行问答。
克里斯·佩奇

6

万一有其他人在那里,有RVM(Ruby的版本管理器)安装:检查是否你在你的下面的行~/.profile~/.bashrc~/.bash_profile文件。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

可能是RVM阻止了运行bash_sessions的退出“钩子”。

那是我的问题。尝试将其注释掉。

资料来源:Reddit


3

在全新安装的Mac OS X(更新至10.13.6)上,未保存bash命令历史记录。也没有.bashrc或.bash_profile文件。在这种情况下,只需添加一个空的.bashrc文件即可为我修复该文件。

touch .bashrc

这似乎就是您所需要的...


似乎也解决了Mojave / 10.14的问题:-)
ssc

3

新安装的osx Mojave也有同样的问题。我检查了~/.bash_history文件并看到了:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

只需将其重新编织回gilm即可解决问题。我用了:

sudo chown gilm /Users/gilm/.bash_history

那解决了我的问题。


2

您还可以.bash_logout使用以下内容创建文件:

shell_session_update

源自GitHub评论


或者,手动键入trap shell_session_update EXIT一次,然后注销。/etc/bashrc_Apple_Terminal脚本中的线索太无聊了,无法在此处包含。
MarkHu '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.