使用 bash 函數建立 bash 的包裝器

使用 bash 函數建立 bash 的包裝器

我有點擔心弄亂 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

相關內容