長いパラメータを使用するフォルダにスクリプトがあります。完全な履歴を返すのではなく、特定のディレクトリで実行されたコマンド履歴を取得できますか?
ベストアンサー1
bashのPROMPT_COMMANDをフックすると、新しいプロンプトが受信されるたびにこの関数が実行されるので、今この履歴をカスタマイズしたいディレクトリにあることを確認するのに良い時間です。この関数には4つの主要な分岐があります。
- 現在のディレクトリ(
$PWD
)が変更されていない場合、何もしません(返されます)。
障害のある人の場合持つ変更してから、「カスタムディレクトリ」コードを1つの場所に分割することが唯一の目的であるローカル関数を設定します。私のテストディレクトリを独自のディレクトリ(区切り)に置き換える必要があります|
。
- カスタムディレクトリに変更していない場合、またはカスタムディレクトリに変更していない場合は、「古いディレクトリ」変数を更新して関数から返されます。
ディレクトリを変更したので、以前のディレクトリ変数を更新し、メモリ内の履歴をHISTFILEに保存し、メモリ内の履歴を消去します。
変えたら入力するディレクトリをカスタマイズし、HISTFILEを
.bash_history
現在のディレクトリのファイルに設定します。そうでなければ、私たち全員が変わったでしょう。外のディレクトリーをカスタマイズして、HISTFILE をストック・ディレクトリーにリセットします。
最後に履歴ファイルを変更したので、以前の履歴をもう一度読んでください。
スムーズな実行を維持するために、スクリプトはPROMPT_COMMAND値を設定し、内部で使用される2つの変数(インベントリHISTFILEと「以前のディレクトリ」)を格納します。
prompt_command() {
# if PWD has not changed, just return
[[ $PWD == $_cust_hist_opwd ]] && return
function iscustom {
# returns 'true' if the passed argument is a custom-history directory
case "$1" in
( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
( * ) return 1;;
esac
}
# PWD changed, but it's not to or from a custom-history directory,
# so update opwd and return
if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
then
_cust_hist_opwd=$PWD
return
fi
# we've changed directories to and/or from a custom-history directory
# save the new PWD
_cust_hist_opwd=$PWD
# save and then clear the old history
history -a
history -c
# if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
if iscustom "$PWD"
then
HISTFILE=$PWD/.bash_history
else
HISTFILE=$_cust_hist_stock_histfile
fi
# pull back in the previous history
history -r
}
PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD