¿Existe alguna utilidad o complemento que incluya el directorio actual en el historial de bash?

¿Existe alguna utilidad o complemento que incluya el directorio actual en el historial de bash?

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_COMMANDfunción, agregue a su .profile/ .bashrc:

myprompt() {  
  [[ "$PWD" != "$PREVPWD" ]] && history -s "# cd \"$PWD\""
  PREVPWD="$PWD" 
}  
PROMPT_COMMAND=myprompt

Esto incluye un comando (comentado) cden 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 -soperación para eliminar y reinsertar/modificar los cdcomandos , por pushdejemplopopd

  [[ "$_cmd" =~ $_re1 ]] && {
    history -d $_seq  # remove original user command
    history -s "$_cmd $_args # $_cmd \"$PWD\"" # add annotated version
  }

(Una opción tentadora es cambiar HISTTIMEFORMATdinámicamente en la PROMPT_COMMANDfunció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 #nnnnlínea (de época-segundos) encima de cada entrada de comando. En principio, se $PWDpodrí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.

información relacionada