如果您打开了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;`
每个人分开但我有时想避免这样做。
答案 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
是一种更舒适的历史搜索方式。