¿Cómo sincronizar el historial de comandos de la sesión de terminal en bash?


13

Intenté buscar ~/.bash_historymis comandos recientes mientras estaba en una sesión de terminal, pero simplemente no estaban allí. Supongo que esto se debe a que tengo varias sesiones de terminal abiertas.

¿Hay alguna manera de que pueda sincronizar (es decir, sync-push o sync-write-out) el historial de comandos de la sesión de terminal actual en el archivo bash_history (sin cerrar la sesión y perder ese entorno)?

(Sería remotamente similar en idea a cómo el synccomando almacena las modificaciones del sistema de archivos en algunos sistemas).

Me imagino que podría configurar bash para preservar el historial de múltiples sesiones, pero la capacidad de impulsar el búfer de historial actual aún sería útil en situaciones en las que esté trabajando en una nueva máquina y accidentalmente olvidó configurar bash de la manera que hubiera deseado .


Intenté el history -a comando de construcción de shell, pero de alguna manera ahora obtengo 'permiso denegado' en el .bash_historyarchivo, después de eso.
n611x007

Respuestas:


19

Agregue esta línea a .bashrc:

export PROMPT_COMMAND="history -a; history -n"

Abrir nueva terminal y verificar.

Explicación

  • history -a agrega nuevas líneas de historial al archivo de historial.
  • history -nle dice bashque lea las líneas que no se leen del archivo de historial a la lista de historial actual de la sesión.
  • PROMPT_COMMAND: el contenido de esta variable se ejecuta como comando regular antes de bashmostrar el indicador. Entonces, cada vez que ejecuta un comando, history -a; history -nse ejecuta y su bashhistorial se sincroniza.

¡Gracias! No sé por qué se me denegó el permiso antes, ¡pero ahora con las nuevas terminales esto parece funcionar como se esperaba! Supongo que normalmente debería poder usar history -aen una terminal con bashrc no modificado también.
n611x007

¿Cuándo hay que empezar a preocuparse por las implicaciones de rendimiento de esto? (Estoy pensando en dispositivos de gama baja, no estoy seguro de cuán grande es esta sobrecarga)
N611x007

1
También es posible que ya tenga un comando rápido, en este caso es mejor usarloexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian

Si ${PROMPT_COMMAND}está vacío, esto da un error debido a la delantera;
Boris Däppen

@ BorisDäppen tiene razón, pero esto se soluciona fácilmenteexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.