我已將 bash 設定為將歷史記錄儲存到文件中。每當 bash 退出時它都會[正確]執行此操作。由於有時 bash 無法正確退出,歷史記錄會遺失。
那麼問題是我可以設定 bash 來更定期地保存歷史記錄嗎?
我正在運行帶有 Linux 核心的 Debian Gnu(版本 6,Squeeze)。
bash 版本:GNU bash,版本 4.1.5(1)-release (i486-pc-linux-gnu)
答案1
將其儲存到您的 bash_profile 或 bashrc
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
答案2
我決定在我的 .bash_aliases 中使用export PROMPT_COMMAND='history -a'
,它在每次提示時從記憶體中的歷史清單寫入歷史檔案。我在重複資料刪除方面遇到了一些問題,但已解決。我確實還使用 cron.daily 和每月來備份文件。如果終端中斷而沒有退出,則不會被儲存。即使堵住出口也不起作用。不幸的是,cron 作業也無法保存儲存在記憶體中的歷史清單。我找不到向目前運行的 shell 發送命令以history -w
從列表寫入檔案的方法。這可以使用,但如果您想保持工作獨立,則必須為選項卡中開啟的每個 shell 提供單獨的 shell。如果沒有,還有另一個連結討論如何在每個提示上寫入,同時進行重複資料刪除。
答案3
您的 $HISTFILE 可能由 root 使用者擁有。假設您使用 bash 作為登入 shell。檢查方法如下:
$ [ -z $HISTFILE ] && echo need to set HISTFILE || ls -l $HISTFILE
-rw------- 1 root root 36639 May 21 19:48 /home/joeb/.bash_history
HISTFILE 的預設值應該是 ~/.bash_history,如果您看到錯誤「需要設定 HISTFILE」或 $HISTFILE 不是 ~/.bash_history,那麼您應該檢查 ~/.profile 或 ~/.bash_profile 或 ~/.bash_history。以確保它沒有被錯誤地設定或重置。
通常,它只屬於root,所以只需重置它:
$ chown joeb.joeb $HISTFILE
$ ll $HISTFILE
-rw------- 1 joeb joeb 36639 May 21 19:48 /home/joeb/.bash_history
登出然後登入。
$ history
應顯示檔案歸 root 所有先前輸入的最後一組命令,後面是檔案所有權更改後輸入的命令。