对于bash历史记录而言,显示执行命令的工作目录将非常有用。历史记录可以很好地了解您所做的事情,但是很难告诉您您在哪里做。
是否有任何这样的插件或实用程序,或者可以配置bash来添加它?
您可以使用该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
在PROMPT_COMMAND
函数中动态更改,但这不会添加到历史记录文件中,仅在显示历史记录时才应用,因此无法按预期工作。)
Bash将历史时间戳记保存为#nnnn
每个命令条目上方的(epoch-seconds)行。原则上,$PWD
可以在时间戳记之后将其添加到该行,而不会破坏任何内容,但是将需要一些不平凡的代码更改才能正确地支持此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句