2013-02-27 82 views
12

首先让我在下面展示一个例子。我怎样才能看到所有的bash历史?

在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不能看到外壳(1)执行的历史,但我希望看到在每个shell所有bash的历史。

所以我的问题是我怎么能看到所有的bash历史?有人知道如何破解?

非常感谢您提前!

回答

12

你应该看看histappend外壳选项和-a标志history

histappend

如果设置,历史列表将追加到由的值命名的文件HISTFILE在shell退出时变量,而不是覆盖文件。

history

-a追加“新”历史线(因为当前的bash会话开始历史系进入)的历史文件。

如果你把history -a到您的PROMPT_COMMAND,你会得到一个始终跟上时代的.bash_history文件。

10
cat ~/.bash_history 

也将工作,虽然我倾向于只使用

vim ~/.bash_history 

,然后用/进行搜索

1

您可以安装类似高级外壳历史记录的东西,它将记录每个命令到一个sqlite3数据库。它附带了一个用于从命令行查询数据库的工具。 https://github.com/barabo/advanced-shell-history

使用此设置,您将在所有会话中统一查看命令历史记录。您还可以获取当前工作目录(或子树)的命令历史记录,命令退出代码,命令持续时间等内容。

完全披露:我编写和维护该工具。