首先让我举一个例子。
在shell(1)中,我执行了以下命令。
$ ping google.com
PING google.com (74.125.235.164) 56(84) bytes of data.
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=1 ttl=54 time=2.85 ms
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=2 ttl=54 time=3.42 ms
然后,打开另一个shell(2)并查看历史记录。
$ history
.
.
.
8720 exit
8721 clear
8722 history
在这种情况下,shell无法查看shell(1)执行的历史记录,但我想查看每个shell中的所有bash历史记录。
所以我的问题是如何才能看到所有的bash历史?有人知道如何破解吗?
非常感谢你!
答案 0 :(得分:20)
cat ~/.bash_history
也可以,但我倾向于使用
vim ~/.bash_history
然后使用/
进行搜索
答案 1 :(得分:14)
您应该查看histappend
shell选项和-a
标记history
:
<强>
histappend
强>如果设置,当shell退出时,历史记录列表会附加到由
HISTFILE
变量的值命名的文件中,而不是覆盖文件。<强>
history
强>
-a
将“新”历史记录行(自当前bash会话开始以来输入的历史记录行)附加到历史记录文件。
如果您将history -a
放入PROMPT_COMMAND
,您将获得一个始终保持最新的.bash_history
文件。
答案 2 :(得分:4)
试试这个:
编辑你的.bashrc并将其附加到它的结尾:
shopt -s histappend
PROMPT_COMMAND="history -n; history -a"
unset HISTFILESIZE
HISTSIZE=2000
来源:http://subbass.blogspot.com.br/2009/10/howto-sync-bash-history-between.html
答案 3 :(得分:1)
您可以安装Advanced Shell History之类的东西,它会将每个命令记录到sqlite3数据库。它附带了一个从命令行查询数据库的工具。 https://github.com/barabo/advanced-shell-history
通过此设置,您将在所有会话中拥有统一的命令历史记录视图。您还可以获得当前工作目录(或子树)的命令历史记录,命令退出代码,命令持续时间等。
完全披露:我编写并维护了该工具。
答案 4 :(得分:0)
正如一些人所述,您需要使用shopt -s histappend
。通过运行shopt
并验证histappend是否为“ on”来进行检查。
要确保每个命令(跨多个并发shell)都出现在每个shell的历史记录中,请在.bashrc文件的末尾添加此命令:
# Skip if not an interactive shell
if [ -z "${PS1}" ]; then return; fi
export PROMPT_COMMAND="history -a; history -c, history -r; ${PROMPT_COMMAND}
-a:将新的历史记录行(自当前Bash会话开始以来输入的历史记录行)附加到历史记录文件。
-c:清除历史记录列表。
-r:读取当前历史记录文件,并将其内容附加到历史记录 list 。
运行source .bashrc
或创建新会话,然后在几个终端窗口中分别输入注释#Tn
。然后在一个终端上,输入history | tail -N
以查看最后N行。您应该看到在不同终端上输入的所有评论。
将以下内容添加到/etc/profile.d/bashrc.sh可能会有所帮助,以便获得历史记录的每一行的时间戳记:
if [ -z "${PS1}" ]; then return; fi
export HISTTIMEFORMAT='%F %T '
结果如下:
[moi@laBoheme ~]$ history | tail -4
3292 2019-01-22 12:41:27 # T1
3293 2019-01-22 12:41:34 # T2
3294 2019-01-22 12:41:42 # T3
3295 2019-01-22 12:41:50 history | tail -4