Bash

在不退出 shell 的情況下歸檔歷史記錄

  • January 7, 2018

我剛剛意識到我多年來一直使用的工作流程並沒有做它應該做的事情。這麼久沒有意識到,你可能會覺得不值得為此付出太多努力,但現在看來,它變得有些重要了。

我在說什麼?好的,我已經tmux執行了幾個會話,每個會話都有不同的視窗等等。像那樣工作真是太好了。不過,它有一個缺點。當伺服器重新啟動時,無論出於何種原因,它都會關閉我的所有會話。很公平,無法避免,也不會經常發生。然而,令人討厭的部分是,我所有的zshorbash history也都消失了。這是個問題。我依賴我的歷史,也許太過分了。

fc -W我通過不時地點擊(in )來規避這個問題zsh。我認為這會附加記憶體中的歷史記錄,然後我只會失去上次呼叫fc -W和重新啟動伺服器之間的部分。但這不是它的作用。如果我fc -W在一個視窗中使用,那麼fc -W在另一個視窗中,第一個視窗的歷史記錄將被第二個視窗的歷史記錄覆蓋。我需要先使用fc -R,但這會複製整個歷史……基本上我一直在濫用fc命令。

問題是:當我在tmux裡面並且突然停電時,如何確保不會失去我的任何歷史記錄?筆記:

  • 我使用無限的歷史,以防萬一。
  • 失去一些歷史記錄是可以的,即如果我必須手動呼叫命令(或在 cronjob 中)並且我失去了自命令上次執行以來的歷史記錄部分,那很好。
  • 退出終端並打開新終端不是解決方案。
  • 我不想將我的命令直接儲存到歷史記錄中,因為這會混淆不同的歷史記錄。
  • bash兩者的解決方案都zsh受到歡迎。zsh是首選。

編輯:突出顯示每個人似乎都誤解的部分。

在 zsh 中,用於fc -AI保存您的歷史記錄,而不是fc -W. 使用-A, not -W,否則來自其他 shell 實例的歷史記錄將被覆蓋。並且-I僅保存自上次保存以來的新歷史條目。

鑑於您的工作流程,您應該自動保存歷史記錄,而不是手動保存。打開inc_append_history選項以在執行之前立即將每個命令保存到歷史文件中。

雖然在 bash 中可以實現相同的效果,但在 bash 實例之間正確共享歷史記錄更加困難。請參閱在多個終端視窗中保留 bash 歷史記錄

引用自:https://unix.stackexchange.com/questions/415420