Será muy útil que el historial de bash muestre el directorio de trabajo en el que se ejecutaron los comandos. El historial es bueno para ver lo que hiciste, pero puede resultar difícil saber dónde lo hiciste.
¿Existe algún complemento o utilidad de este tipo, o se puede configurar bash para agregarlo también?
Respuesta1
Puedes usar elPROMPT_COMMAND
función, agregue a su .profile
/ .bashrc
:
myprompt() {
[[ "$PWD" != "$PREVPWD" ]] && history -s "# cd \"$PWD\""
PREVPWD="$PWD"
}
PROMPT_COMMAND=myprompt
Esto incluye un comando (comentado) cd
en su historial cada vez que cambia el directorio actual. Almacena $PWD
, por lo que cualquier cosa similar cd ..
seguirá registrando la ruta completa. Esto aparece en tu historial normal, por lo que no es lo más conveniente, y rompe taquigrafías como !$
…
Aquí hay una versión mejor (es decir, sobrediseñada), que verifica si el comando anterior cambió el directorio a un directorio absoluto para evitar contaminar el historial:
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
Es posible que necesite ajustes menores si tiene una costumbre HISTTIMEFORMAT
.
Puede modificar la history -s
operación para eliminar y reinsertar/modificar los cd
comandos , por pushd
ejemplopopd
[[ "$_cmd" =~ $_re1 ]] && {
history -d $_seq # remove original user command
history -s "$_cmd $_args # $_cmd \"$PWD\"" # add annotated version
}
(Una opción tentadora es cambiar HISTTIMEFORMAT
dinámicamente en la PROMPT_COMMAND
función, pero esto no se agrega al archivo del historial, solo se aplica cuando muestra el historial, por lo que no funcionará como se esperaba).
Bash guarda las marcas de tiempo del historial como una #nnnn
línea (de época-segundos) encima de cada entrada de comando. En principio, se $PWD
podría agregar a esa línea después de la marca de tiempo sin romper nada, pero se requerirían algunos cambios de código no triviales para admitir esto adecuadamente.