私は 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
。