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
}