如何使bash(Terminal.app)记住以前的会话历史?


11

在工作的计算机上,即使我刚打开一个新的终端,我的bash shell也会记住以前会话的历史记录。
在我家里的电脑上,这不会发生。
我的两台计算机上都具有相同的OS 10.6.8,并且在中没有任何与历史记录相关的设置.bash_profile
我该如何在家用计算机上进行设置,使其记住各个会话的历史记录?



Answers:


11

您需要告诉bash历史记录文件的存放位置以及保留的行数:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile

3
默认情况下,所有这些都是不必要的。默认的bash配置(至少在Mac OS X上)启用命令历史记录。
克里斯·佩奇

关键字/应该/。如果他没有记录历史记录,这将迫使bash将历史记录保留在初始状态。
亚伦湖

2
不仅是应该的,但意志,除非事情已经做了抑制默认的历史行为,在这种情况下,就砰一些值这些变量仅仅是掩盖了实际问题。如果此答案解决了问题,那么其他事情确实搞砸了,应该修复以避免其他问题。
克里斯·佩奇

您可以设置这些设置,但是如果您只想在终端上“启用”历史记录,那么我找到了一个更简单的解决方案/答案。它对我来说很好用apple.stackexchange.com/a/220667/243988(我使用的是macOS High Sierra)
jpruizs

4

我只是发现我有一个类似的问题,尽管我的老板只有两台Mac,而且都没有坐在我的办公桌上。不能接受,但是又是一场战斗。

无论如何,在家里,Mac Mini(从MacBook Pro迁移而来)即使在设置.bashrc和/或后也无法配合.profile。然后我发现我的~/.bash_history文件神秘地归根所有。必须这样做:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(是的,我知道可以用更少的命令来完成。习惯。)

然后我退出了Terminal,然后开始了新的工作。!先前丢失的各种历史都扑向了过去。真好

任何人读这本书的可能性都无意间陷入了这种困境:0.2%。我敢肯定,当我过分热衷于“修复”其他东西时,我已经把它搞砸了。


4

我遇到了这个问题,对我有用的是.bash_sessions_disable在用户文件夹(~/)中创建一个名为的文件。

基本上,OS X在.bash_sessions每个会话的文件夹中创建历史文件(在我的情况下,每个选项卡一个)。即使正确关闭这些会话,OS X也不会重播历史记录.bash_history

创建.bash_sessions_disable您将禁用此行为。

touch ~/.bash_sessions_disable

禁用每个会话的命令历史记录(默认行为)与要求的相反。
克里斯·佩奇

@ChrisPage这仅在发问者询问每个会话的历史记录时才是正确的,而事实并非如此(“跨会话记录历史记录”)。禁用bash会话行为可以重播单个历史记录,.bash_history而不是将历史记录保留在.bash_sessions/文件夹下。这是正确的答案,恕我直言。
Matt H

@MattH该问题询问如何使历史记录再次起作用,因为它似乎根本不起作用,并且禁用此每次会话历史记录功能的方向不正确。如果每个会话的历史记录机制中存在错误,则应该提交错误报告,但提出答案似乎就好像对于所有用户而言都是正确的……不正确。通常它正常工作。有关更多信息,请参见我对各种答案的评论。
克里斯·佩奇

我最初评论时也应该提到这一点:禁用整个bash保存/恢复机制是万不得已的做法,应尽可能避免。您只能设置SHELL_SESSION_HISTORY为0来关闭每个会话的命令历史记录行为,如中所述/etc/bashrc_Apple_Terminal
克里斯·佩奇

1

这个Reddit主题的答案为我节省了:

可能是RVM阻止了bash_sessions运行的退出“钩子”。如果您将.bash_profile中的以下行注释掉,它应该可以工作。

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

0

我也有类似的问题,没有历史记录。给定的解决方案不起作用,但最终我发现问题很简单,就像缺少的.bash_history

解决的办法是转到/home/[username]/并添加文件.bash_history,因此

nano .bash_history

然后在文件中键入任何内容(否则将不会创建),退出并保存。此后,历史记录开始正常运行。


如果这样可以解决问题,则还有其他问题,应加以解决,以避免其他问题。如果在没有历史记录文件的情况下启动Bash,它将创建一个。如果它不尝试创建一个,或者无法创建它,则某些shell启动脚本或主目录权限有问题。例如,请参见答案:apple.stackexchange.com/a/118764/6883
克里斯·佩奇
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.