如何在 bash 中同步終端會話命令歷史記錄?
我試圖
~/.bash_history
在終端會話中搜尋我最近的命令,但它們不存在。我想這是因為我打開了多個終端會話。有沒有辦法可以將目前終端會話的命令歷史同步(即同步推送或同步寫入)到 bash_history 文件中(不關閉會話並失去該環境)?
(它在想法上與
sync
命令如何在某些系統上儲存文件系統修改非常相似。)我想我可以設置 bash 來保留多個會話歷史記錄,但是當您在新機器上工作並且您不小心忘記按照您可能想要的方式設置 bash 時,推送目前歷史記錄緩衝區的能力仍然很有用.
將此行添加到
.bashrc
:export PROMPT_COMMAND="history -a; history -n"
打開新終端並檢查。
解釋
history -a
將新的歷史行追加到歷史文件。history -n
告訴bash
讀取未從歷史文件讀取到目前會話歷史列表的行。PROMPT_COMMAND
: 此變數的內容在bash
顯示提示符之前作為正常命令執行。因此,每次執行命令後,history -a; history -n
都會執行,並且bash
會同步您的歷史記錄。
雖然我喜歡能夠在終端之間共享歷史,尤其是新終端。我不想分享發生的每一個命令,因為一個視窗經常執行特定任務,與其他視窗分開。我會讓它們在 shell 退出時合併,或者在我請求時合併。
很長一段時間以來,我一直在尋找一種合併 bash 歷史記錄(帶有時間戳)的方法,但我似乎沒有什麼可以接受的……
最後我只是“咬緊牙關”並DIY了一個腳本來合併,磁碟上的“.bash_history”與記憶體中的shell“歷史”。在這些時間戳中保留時間戳順序和命令順序。
現在,當我獲取它時(您可以根據需要將其設為別名或函式),我使用別名“hc”。我目前的 shell 會話在磁碟和記憶體之間合併,因此歷史記錄是從其他以前的合併更新的,當我想要時(或通過“.bash_logout”從該 shell 註銷)。
根據定義的 perl RE,您可以選擇刪除唯一命令(即使是多行命令)和/或刪除(清除)簡單和/或敏感命令。調整以適應!
這是結果…… https://antofthy.gitlab.io/software/history_merge.bash.txt
享受。