history
搜索grep
来查找我最近编写的命令,但是我不想寻找终端向上滚动并寻找更多内容,等等。 > 那么有什么方法可以使每个终端立即写入.bash_history吗?或至少一分钟一次,或类似的东西?
#1 楼
一个简单的解决方案,在“实时更新Bash历史记录”中进行了详细介绍。它表示将这些命令放入.bashrc配置中:
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
第一条命令将
.history
文件模式更改为追加。第二个命令配置history -a
命令在每个shell提示符下运行。 -a
立即将当前行/换行写入历史记录文件。与zsh相关:
如何在zsh中的终端之间共享历史记录? />
评论
好这种作品。我尝试了更多测试,似乎只对第一个命令起作用。对您来说正确吗?
–马特
11-10-16在15:03
#2 楼
尝试将其放入您的.bashrc
中:shopt -s histappend # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
在这里信用:https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash -terminal-windows / 3055135
history -c
清除正在运行的会话的历史记录。这将使历史计数器减少$HISTSIZE
的数量。 history -r
读取了$HISTFILE
的内容,并将其插入到当前正在运行的会话历史记录中。这将使历史记录计数器增加$HISTFILE
中的行数。 我认为这意味着这些命令几乎立即可用(您有一个终端,输入
echo 1
,第二个终端echo 2
,第一个echo 3
,并按了两次向下箭头,您应该有echo 2
。您必须发出给定终端中的命令,可以访问已编写的内容。评论
辉煌!谢谢。纳闷为什么人类历史上没有记载这些选择...
– artfulrobot
13年5月17日在12:31
@artfulrobot:此命令是内置的bash,因此在man bash中进行了描述。您也可以使用帮助历史记录。
– pabouk
2014年7月2日在9:32
我将zsh配置为如下工作:每个shell都跟踪其OWN历史记录(在此之前,是组合历史记录),并且每个命令都附加到组合历史记录之后。这与始终为每个shell重新加载每个命令的历史记录不同并且更好,因为我倾向于为每个shell终端拥有不同的“工作线程”或“作业”。我认为这是-r和-c与仅具有-a之间的区别。
–陆even
2015年2月25日在9:40
历史的缺点-c;历史记录-r是,如果您在同一台计算机上打开了另一个终端,并切换到另一个终端以执行某些操作,请按向上键,您将看到前一个终端的最后一条命令,而不是该终端的命令。很烦人。
– R J
19年3月16日在19:28
@RJ的评论可能正是我收到这些共享设置请求的原因。感谢您的要求。不幸的是,自从我设置好东西以来已经快十年了(这绝对是不平凡的),我需要真正地跳回去确定正确的设置以使这种行为正确。虽然绝对值得写一篇博客文章,但是目前我还没有准备好写博客,但一直推迟。我知道那里有一个现有的博客文章,那里有人明确提出了如何正确处理此问题的博客。我找一个。
–陆even
20-05-11在13:09
#3 楼
我有一个大约有100000个条目的大历史文件,并且清除历史列表并读取整个历史文件(使用history -c
和history -r
)的变体在显示提示之前引入了明显的延迟(可能为0.2秒)。使用history -n
可以更快地从历史文件读取新行: shopt -s histappend
PROMPT_COMMAND='history -a;history -n'
PROMPT_COMMAND
不必导出,因为它是一个shell变量。评论
辉煌!连接断开时不再丢失历史记录!
– Tobia
16年1月15日在14:45
太好了通过附加到文件并从文件读取,它将在多个终端之间共享历史记录。
– Wisbucky
18年2月20日在19:45
#4 楼
对于所有其他答案(基本上是相同的东西)的注释:在
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
(或朋友)中设置.bashrc
就足够了。还可以手动运行
history -a
不需要
shopt -s histappend
命令,因为history -a
总是在文件中添加新行,并且永远不会覆盖它。另外,至少从Bash 4开始,histappend
是默认行为。评论
在我的Mac 10.13.6上,如果没有shopt -s histappend,它似乎无法工作。另请注意,我已将其添加到我的〜/ .bash_profile中
–ubershmekel
18年8月28日在0:51
您的系统中可能有另一个设置禁用了histappend,因为这是默认行为。我会寻找它,但是我无法使用Mac。
–古斯
18年8月28日在5:13
Mac从未附带Bash 4(甚至是新的)。苹果不喜欢Bash随Bash 4切换到的GPLv3,因此很久以前他们停止在MacOS上更新Bash。这也是为什么新的MacOS切换到Zsh作为默认Shell的原因。长话短说,如果要在Mac上使用Bash 4,则必须自己安装。
–乔纳森·雷恩(Jonathan Wren)
19-10-30在17:12
评论
通常,我使用control-r反向搜索一次bash的命令历史记录。比历史更方便| grep,除非您需要正则表达式。@PeterCordes但这只会在那个终端的历史中搜索,因此它正朝着与问题相反的方向发展。 ;)