我有點擔心弄亂 bash 歷史記錄設置,我只想編寫自己的自訂 bash 歷史記錄。我考慮過使用這樣的 bash 函數:
bash(){
# write to a custom history file manually
echo "$@" >> $HOME/my_bash_history
command bash "$@"
}
export -f bash;
但這並不完全有效 - 發生的情況是 接管command bash
,並且事情不再通過 bash 函數。我需要 bash 的所有標準輸入來執行此 bash 函數,以便將所有內容寫入自訂檔案中。有人知道如何做到這一點嗎?
答案1
您想要的是一個DEBUG
陷阱(在每個命令之前運行)或可能是一個陷阱PROMPT_COMMAND
(在每個提示之前運行)。
陷阱離你的嘗試更近了。基本概念概論於bash 是否有一個在執行命令之前運行的鉤子?一個完善的交鑰匙版本存在於bash 預執行。
根據其作者的說法,bash-preexec 的用途是巴什哈布提供“雲端中的 bash 歷史記錄”,所以我確信它可以完成“文件中的 bash 歷史記錄”的任務。
答案2
您正在嘗試實現相當於這段“永恆的歷史”:
export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo $$ $USER \
"$(history 1)" >> ~/.bash_eternal_history'
核心思想是history 1
(在 bash 中)列出給 bash 的最後一行。
$ echo "$(history 1)"
12766 2019-05-31T20:14:44+0000 echo "$(history 1)"
它實際上只在腳本內具有有意義的值(不是同一行)。
和;為 bash 的每個新行PROMPT_COMMAND
執行命令。history
IMO:命名一個函數似乎不是一個好主意bash
。