Bash履歴の場合は、実行されたコマンドの作業ディレクトリを表示すると便利です。歴史はあなたが何をしたのかを理解するのに役立ちますが、どこでしたかを言うのは難しいです。
そのためのプラグインやユーティリティはありますか?それともそれを追加するようにbashを設定できますか?
答え1
あなたはそれを使用することができますPROMPT_COMMAND
.profile
機能を/に追加します.bashrc
。
myprompt() {
[[ "$PWD" != "$PREVPWD" ]] && history -s "# cd \"$PWD\""
PREVPWD="$PWD"
}
PROMPT_COMMAND=myprompt
cd
現在のディレクトリが変更されるたびに(注釈付き)コマンドが履歴に入力されます。それは保存される$PWD
ので、cd ..
まだフルパスを記録します。これは一般的な記録に現れるので、最も便利ではなく、略語を区別します。たとえば!$
...
以下は、古い汚染を防ぐために、以前のコマンドがディレクトリを絶対ディレクトリに変更したことを確認するより良い(たとえば、過度にエンジニアリングされた)バージョンです。
myprompt() {
local _seq _date _time _cmd _args
[[ -z "$HISTTIMEFORMAT" ]] && {
## reads history with no HISTTIMEFORMAT set
read _seq _cmd _args < <(history 1)
} || {
## this reads history with a HISTTIMEFORMAT='%Y%m%d %H:%M:%S '
read _seq _date _time _cmd _args < <(history 1)
}
## escaping =~ is troublesome, use variables instead
local _re1='(cd|pushd|popd)'
local _re2='^"?/'
## check for change-of-directory with absolute path
[[ "$_cmd" =~ $_re1 && "$_args" =~ $_re2 ]] && {
PREVPWD="$PWD"
return
}
[[ "$PWD" != "$PREVPWD" ]] && {
history -s "# cd \"$PWD\"" # stuff into history
PREVPWD="$PWD"
}
}
PROMPT_COMMAND=myprompt
カスタマイズした場合は、いくつかの微調整が必要な場合がありますHISTTIMEFORMAT
。
、、コマンドを削除して再挿入/修正するようにhistory -s
操作を調整できます。cd
pushd
popd
[[ "$_cmd" =~ $_re1 ]] && {
history -d $_seq # remove original user command
history -s "$_cmd $_args # $_cmd \"$PWD\"" # add annotated version
}
HISTTIMEFORMAT
(魅力的なオプションの1つは関数で動的に変更することですが、PROMPT_COMMAND
これは履歴ファイルに追加されず、履歴が表示されたときにのみ適用されるため、必要に応じて機能しません。)
Bashは#nnnn
各コマンド項目の上に過去のタイムスタンプを(epoch秒)行として保存します。原則として、$PWD
何も壊れずにタイムスタンプの次の行に追加できますが、それを正しくサポートするにはいくつかの重要なコード変更が必要です。