Saltar al contenido

Crear registro de historial por directorio de trabajo en bash

Solución:

Partiendo de la respuesta proporcionada por Groggle, puede crear un cd (ch) alternativo en su ~ / .bash_profile like.

function ch () {
    cd "[email protected]"
    export HISTFILE="$(pwd)/.bash_history"
}

exportando automáticamente el nuevo valor HISTFILE cada vez que se llama a ch.

El comportamiento predeterminado en bash solo actualiza su historial cuando finaliza una sesión de terminal, por lo que esto solo guardará el historial en un archivo .bash_history en cualquier carpeta desde la que finalice su sesión. En esta publicación se menciona una solución y se detalla en esta página, lo que le permite actualizar su HISTFILE en tiempo real.

Una solución completa consiste en agregar dos líneas más a su ~ / .bash_profile,

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

cambiar el modo de historial para agregarlo a la primera línea y luego configurar el comando de historial para que se ejecute en cada indicador.

Puede configurar el código para que se ejecute al cambiar de directorio. En zsh, esto es tan simple como definir una función y agregarla al chpwd_functions formación. En bash, esto requiere un poco más de trabajo, pero también puede hacerlo; ver Ejecutar scripts bash al ingresar a un directorio para saber cómo definir un chpwd función que se ejecuta en cada cambio de directorio.

Por lo que quieres hacer, el chpwd La función necesita escribir el historial actual en el archivo antiguo. Para guardar el historial en el lugar correcto al salir de bash, configure el HISTFILE variable al archivo de historial para el nuevo directorio y lea el nuevo historial.

chpwd () {
  history -a
  mkdir -p "$HOME/.bash_history.d/${PWD%/*}"
  HISTFILE=~/.bash_history.d/$PWD
  history -r
}

Tenga en cuenta que escribo el historial en una jerarquía en su directorio de inicio, no en el directorio actual. Escribir el historial de shell en el directorio actual sería extremadamente peligroso y perturbador: terminaría con filtraciones de privacidad por todas partes, se arriesgaría a modificar archivos no deseados (¿qué pasa si el nombre del archivo del historial es un enlace simbólico existente a algún otro lugar?), etc.

Probablemente sería mejor escribir el historial después de cada comando. En bash, puede habilitar esto con el histappend opción. Con esta opción, no es necesario ejecutar history -a explícitamente.

shopt -s histappend
chpwd () {
  mkdir -p "$HOME/.bash_history.d/${PWD%/*}"
  HISTFILE=~/.bash_history.d/$PWD
  history -r
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *