2014-09-24 22 views
2

.bash_history文件對我們很多人來說都是救命。不幸的是,BASH似乎只在會話關閉時才保存會話的命令(通過exit)。BASH:有沒有辦法在閒置期間自動將最近的幾行保存到我的bash歷史記錄中?

這是一個悲劇,然後,當一個重要會話中的所有命令在會話意外關閉時被蒸發 - 在它將所有命令歸檔爲花哨的語法並花費數小時才能正確完成之前......

這發生在我身上時,我忘了下班時關閉一個SSH連接,並斷開連接由於不活動(Write failed: broken pipe),或者當我重新啓動我的電腦,而無需手動關閉我的終端,等等。

我很想讓我的BASH命令在一段時間後存檔 - 比如說每隔10分鐘 - 所以如果我關閉了一個會話,我的命令仍然存在。這似乎是很多人可能會覺得有用的東西。

有沒有人有如何做到這一點的想法?

理想....

  • 的功能將需要上一次設置用戶的部分沒有額外的努力 - 這是他/她可能會增加~/.bashrc
  • 用戶可以改變備份間隔
  • 它會避免使用臨時文件,別名bash或其他「黑客」

StackOverflow -ers - 考慮自己挑戰!

回答

3

可以使用history命令-a選項:立即

history 
-a  Append the ``new'' history lines (history lines entered since the 
     beginning of the current bash session) to the history file. 

你可以寫的每一個命令歷史記錄文件與PROMPT_COMMAND功能的一點點幫助:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt. 

所以只要把這成.bashrc

PROMPT_COMMAND="history -a" 
+0

那麼什麼這樣做是歸檔自上次歸檔後輸入的所有新命令 - 有效地,每次命令都會在成功完成該命令時歸檔,對嗎? – jvriesem 2014-09-25 00:40:40

+0

是的,如果通過「成功完成」,您的意思是輸入命令 - 在命令行中輸入命中。如果命令有任何意義是另一回事,但它將被保存在.bash_history中。 – 2014-09-25 00:53:38

+0

這可以自動化,也許可以通過在後臺運行一些類似cron的工作?如果是這樣,我會將問題標記爲已接受! – jvriesem 2015-11-18 02:15:32

0

根據this bash將(通常)在斷開連接時收到SIGHUP

使用trap我們可以寫歷史(如跛足#*?是的bash默認情況下不這樣做,但..):

function rescue_history { 
    history -a 
} 
trap rescue_history SIGHUP 

把上面你.bashrc

相關問題