如何訪問 sh 中的歷史緩衝區?(不在 Bash 中)
sh中是否有命令歷史記錄,例如如何訪問它,以及如何確保它清晰?
在這裡澄清一下 shell:假設您登錄到一個非 Gui Linux 系統,並且*$SHELL*沒有設置為 Bash,而是設置為 Dash 或任何可能的 Bourne-like shell。
手冊頁提到了一個“歷史”命令,我在一些 BSD 系統中看到過,但這實際上不在我的 shell 中,我無法在隨後的 sh 手冊和資訊頁面中輕鬆找到答案。
descriptor 在這篇文章中的評論讓我想到,這可能更多地與需要了解sh中的鍵綁定有關,而不是實際上類似於 shell 之間的差異。
除非明確設置,否則沒有預設的 shell 歷史記錄。要驗證您是否擁有它,
env|grep -i hist
可以執行該命令,如果您看到諸如histfile
etc 之類的變數(可能大寫),這意味著您的 shell 歷史記錄已啟用,您應該看到歷史記錄文件所在的位置。要清除,你可以做任何體面的方法,除了刪除文件
並非所有 shell 都支持歷史記錄。
dash
如果使用 libedit 支持編譯,則通過命令對歷史記錄的支持有限fc
,否則不支持。dash
無法保存歷史文件。通常,如果 shell 不支持向上箭頭鍵,您可以假設它也不會保存歷史文件。這不是一個硬性規定,但在我遇到的每一種情況下都是如此。
其他一些 shell(
bash
特別是,但也有其他 shell)使用 readline,它通常將您的主目錄下的歷史記錄保存為一個~/.*_history
文件,並*
替換為程序的名稱。例如,Python 3 使用 readline,並將其歷史儲存在~/.python_history
.根據 shell,保存位置可能是可配置的,也可能是不可配置的。
bash
並zsh
使用HISTFILE
(全部大寫)變數。如果你的 shell 配置正確,這不應該是一個環境變數,所以如果你看到它,env
你就犯了一個錯誤(但它仍然應該顯示在set
or的輸出中printf %s\\n "$HISTFILE"
)。如果程序不支持歷史記錄(例如,使用的shell
ed
腳本read
或舊版本的.mysql``rlwrap