長い引数で使用するフォルダーにスクリプトがあります。履歴全体をさかのぼる代わりに、その特定のディレクトリで実行されたコマンドの履歴を保持できる可能性はありますか?
history | less
たぶん?それは本当にあなたの質問に答えませんが、それは私が始めるところです。
長い引数で使用するフォルダーにスクリプトがあります。履歴全体をさかのぼる代わりに、その特定のディレクトリで実行されたコマンドの履歴を保持できる可能性はありますか?
history | less
たぶん?それは本当にあなたの質問に答えませんが、それは私が始めるところです。
回答:
bashのPROMPT_COMMANDにフックすることにより、この関数は新しいプロンプトが表示されるたびに実行されるため、カスタム履歴が必要なディレクトリにいるかどうかを確認するのに適切な時間です。この関数には4つのメインブランチがあります。
$PWD
)が変更されていない場合は、何もしません(戻る)。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
ジェフの答えは、単一のディレクトリの履歴が必要な場合は素晴らしいですが、zshのインストールに問題がない場合は、per-history-directoryを使用して、すべてのディレクトリのディレクトリに固有の履歴を取得できます。
次の方法でzshをインストールできます。
brew install zsh
あるいは、oh-my-zshをインストールしたい場合は、histdbプラグインを追加して、histdbが追加するsqlite dbをクエリするカスタムクエリを作成することができます。これについては、Dev Diariesの投稿で自動補完を追加しました。ボーナスコマンドセクションを確認してください。
クエリは次のようになります
show_local_history() {
limit="${1:-10}"
local query="
select history.start_time, commands.argv
from history left join commands on history.command_id = commands.rowid
left join places on history.place_id = places.rowid
where places.dir LIKE '$(sql_escape $PWD)%'
order by history.start_time desc
limit $limit
"
results=$(_histdb_query "$query")
echo "$results"
}
これは、オプションの制限も受け入れます。
show_local_history 50
例えば。