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

関連情報