是否可以搜索所有bash历史记录

时间:2015-10-06 18:19:17

标签: bash

如果您打开了10个xterms,那么是否可以以某种方式搜索所有bash历史记录?

我能做到

select u_name, count(*) AS numb 
from forms 
where Month(date) = MONTH(CURDATE()) 
    AND YEAR(CURDATE()) 
GROUP BY U_name 
ORDER BY numb DESC;`

每个人分开但我有时想避免这样做。

2 个答案:

答案 0 :(得分:5)

我将假设这些xterm窗口都是针对相同的用户ID,并且都在同一主机上。如果它们不是同一个用户,则必须更改其历史文件位置以使用相同的历史文件。如果您需要这样做,请参阅此主题:https://superuser.com/questions/760830/how-do-i-change-the-bash-history-file-location

但是你要遇到的主要问题是,当shell关闭时,bash只会将其历史记录写入.bash_history。但是,您可以修改.bashrc,将最近的命令立即写入.bash_history,如下所示:

# When the shell exits, append to the history file instead of overwriting i
shopt -s histappend

# After each command, append to the history file and reread it
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

有关详细信息,请参阅此链接:https://unix.stackexchange.com/questions/1288/preserve-bash-history-in-multiple-terminal-windows

答案 1 :(得分:2)

Bash具有内存历史记录和历史记录文件(默认情况下为$HISTFILE~/.bash_history)。默认情况下,所有bash会话共享一个历史文件,每当bash shell退出时,该文件将通过最后一个退出的bash shell的内存历史记录获取。

您可以将行为从覆盖更改为附加:

shopt -s histappend

您可以使用

手动调用此转储
history -a #-a stands for append

我所做的是将history -a作为PROMPT_COMMAND的一部分,以便每个新的提示行在全局历史记录文件中添加新记录。

然后,每当我需要其他会话的历史记录时,我只需将全局历史记录文件加载到内存历史记录中:

history -r
  

-r读取历史文件并将内容附加到历史记录

可以使用history阅读help history命令的手册,有关历史记录的更多详细信息位于man 1 bash

除了设置shopt -s histappend并将history -a添加到PROMPT_COMMAND之外,将尺寸(HISTFILESIZE,HISTSIZE)设置为某些较大的值并HISTCONTROL也很有用。例如到"ignoreboth:erasedups"以消除重复。

此外,我发现Ctrl-R是一种更舒适的历史搜索方式。