Manejo del historial de Bash con múltiples terminales

88

Utilizo principalmente Terminator, y generalmente se abre con 3 ventanas de terminal divididas. También uso el terminal Gnome por varias razones.
Me pregunto cómo se maneja la historia de bash en este caso, ya que a veces echo de menos los comandos emitidos previamente cuando ejecuto history

Por ejemplo, mi mensaje muestra la línea actual de historial de bash ( \! ) y si abro Terminator con 3 ventanas de terminal divididas obtengo la misma línea de historial (digamos 100) en todas las terminales. ¿Qué historia se guardará?

También lanzando el terminal Gnome después de usar Terminator, obtengo la línea 100 al inicio, independientemente de todos los comandos emitidos antes en Terminator

    
pregunta zetah 18.11.2011 - 07:39

4 respuestas

80

La sesión de bash que se guarda es la del terminal que se cierra más tarde. Si desea guardar los comandos para cada sesión, puede usar el truco explicado aquí .

export PROMPT_COMMAND='history -a'
     

Para citar la página de manual: "Si se establece, el valor se ejecuta como un comando antes de emitir cada solicitud principal".

     

Así que cada vez que mi comando ha terminado, agrega el elemento del historial no escrito a ~/.bash_history antes de mostrar el aviso (solo $ PS1) nuevamente.

     

Entonces, después de poner esa línea en /etc/bash.bashrc , no tengo que encontrarme reinventando ruedas o perdiendo valiosos segundos volviendo a escribir cosas solo porque era flojo con mis terminales.

De todos modos, deberá tener en cuenta que los comandos de diferentes sesiones se mezclarán en su archivo de historial, por lo que no será tan sencillo leerlo más tarde.

Ver también:

respondido por el jcollado 18.11.2011 - 07:52
26

Después de múltiples lecturas de man bash , utilizo archivos de historial separados para cada caparazón. Hice un mkdir -m 0700 ~/.history y luego agregué

[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$$
# close any old history file by zeroing HISTFILESIZE  
HISTFILESIZE=0  
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096  
HISTSIZE=4096  

a mi ~/.bashrc . De vez en cuando, recuerdo du -sk .history y lo limpio. Es agradable tener todos los comandos que he escrito conservados para mí.

Acabo de utilizar lo anterior para ver lo que he estado haciendo, últimamente:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
o
cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(para incluir el primer argumento, por ejemplo, sudo mount en la cadena de clasificación).

    
respondido por el waltinator 20.11.2011 - 00:48
4

Ver también " mantener la persistencia de la historia en bash " para otro alternativa. Impulsa el aviso para enviar todos los comandos ingresados ​​en el terminal any en un archivo de "historial persistente" (junto con lo que normalmente se hace para el .history normal).

    
respondido por el Eli Bendersky 25.01.2016 - 00:33
4

Para mostrar history desde todos los terminales:

Agregue export PROMPT_COMMAND='history -a; history -r' a su archivo .bashrc.

Fuente: enlace

respondido por el Elijah Lynn 31.10.2013 - 20:17

Lea otras preguntas en las etiquetas