2013-02-25 93 views
2

我經常在我的.bash_history文件中查看我是如何運行程序的,或者確切地說我使用了什麼參數。問題是我的歷史看起來很不完整。一些命令,我​​會發現我幾個月前跑,其他我昨天跑了,不在那裏。我認爲問題在於我通過ssh工作了很多,而且我經常不會完全註銷,而是在我的筆記本電腦睡眠時或者移動到不同的WiFi網絡時斷開連接。所以它看起來像bash只在寫入歷史文件時退出。這是正確的嗎?有沒有辦法強制它寫出每一條命令,或者每一條命令?如何更頻繁地更新bash_history?

回答

6

history -a添加到您的PROMPT_COMMAND以在每次提示之前更新您保存的歷史記錄。

PROMPT_COMMAND='history -a' 

這應該在你的.bashrc文件中。

+0

請注意,在bash-4.2-alpha之前的bash中存在一個錯誤,它阻止了這種始終正常工作的「歷史-a」方法(例如,如果您使用空的$ HISTFILE和'PROMPT_COMMAND ='history -a' ',$ HISTFILE不會按預期更新)。請參閱[原始錯誤報告](http://lists.gnu.org/archive/html/bug-bash/2010-08/msg00071.html)。這在bash-4.2-alpha(在[CHANGES](http://git.savannah.gnu.org/cgit/bash.git/diff/CHANGES?id=495aee441b75276e38c75694ccb455bb6463fdb9)中搜索'history -a')該修補程序的說明。 – troydj 2014-06-17 12:38:44

1

您可以安裝Advanced Shell History,這是一款開放源代碼工具,可以將您的bashzsh歷史記錄寫入sqlite數據庫。這比在您的PROMPT_COMMAND中僅包含history -a更加極端,但它也記錄了諸如當前工作目錄,命令退出代碼,命令啓動和停止時間,會話開始和停止時間,tty等內容。

如果你想查詢歷史數據庫,你甚至可以編寫自定義的SQL查詢,並將它們提供給捆綁的ash_query工具。還有一些有用的預打包查詢,但由於我很熟悉SQL,因此通常只需打開數據庫並在需要查找某些內容時自定義一些內容。

但是,我發現一條命令非常有用,它查看當前工作目錄的歷史記錄。它可以幫助我記住我在做什麼事情時從哪裏離開。

[email protected]:~$ ash_query -q CWD 
session 
    when     what 
1 
    2014-08-27 17:13:07 ls -la 
    2014-08-27 17:13:09 cd .ash 
    2014-08-27 17:16:27 ls 
    2014-08-27 17:16:33 rm -rf advanced-shell-history/ 
    2014-08-27 17:16:35 ls 
    2014-08-27 17:16:37 less postinstall.sh 
    2014-08-27 17:16:57 sudo reboot -n 

而使用當前工作目錄相同的歷史(和任何它下面):

[email protected]:~$ ash_query -q RCWD 
session 
    where 
     when     what 
1 
    /home/vagrant/advanced-shell-history 
     2014-08-27 17:11:34 nano ~/.bashrc 
     2014-08-27 17:12:54 source /usr/lib/advanced_shell_history/bash 
     2014-08-27 17:12:57 source /usr/lib/advanced_shell_history/bash 
     2014-08-27 17:13:05 cd 
    /home/vagrant 
     2014-08-27 17:13:07 ls -la 
     2014-08-27 17:13:09 cd .ash 
    /home/vagrant/.ash 
     2014-08-27 17:13:10 ls 
     2014-08-27 17:13:11 ls -l 
     2014-08-27 17:13:16 sqlite3 history.db 
     2014-08-27 17:13:43 ash_query 
     2014-08-27 17:13:50 ash_query -Q 
     2014-08-27 17:13:56 ash_query -q DEMO 
     2014-08-27 17:14:39 ash_query -q ME 
     2014-08-27 17:16:26 cd 
    /home/vagrant 
     2014-08-27 17:16:27 ls 
     2014-08-27 17:16:33 rm -rf advanced-shell-history/ 
     2014-08-27 17:16:35 ls 
     2014-08-27 17:16:37 less postinstall.sh 
     2014-08-27 17:16:57 sudo reboot -n 

FWIW - 我是作者和項目的維護者。

0

執行以下命令對應

  1. 出口HISTTIMEFORMAT = 「%d /%米/%Y%T」
  2. 禁用了javascript -s histappend
  3. PROMPT_COMMAND =「歷史-a; $ PROMPT_COMMAND 「

注意 - 您可以添加上述命令到.bash_profile文件中,並重新啓動了永久性的解決方案