Yo muchas veces abiertos y mucha terminales [En este momento tengo 7 abierta en este espacio de trabajo] y yo busco a menudo historycon grepencontrar un comando que he escrito recientemente, pero no quiero dar caza a la terminal y luego desplazarse hacia arriba y buscarlo más, etc. A veces mis terminales se cierran sin 'salir', y todo lo que he escrito se pierde [A veces he necesitado algo que había escrito en un terminal que fue asesinado].
Entonces, ¿hay alguna manera de hacerlo para que cada terminal escriba en .bash_history inmediatamente? o al menos una vez por minuto, o algo así?

control-rpara realizar búsquedas inversas en el historial de comandos de un bash. Más conveniente que ahistory | grepmenos que necesite una expresión regular.Respuestas:
Una solución simple como se detalla en Actualizar el historial de Bash en tiempo real .
Dice poner esos comandos en la configuración .bashrc:
El primer comando cambia el
.historymodo de archivo para agregar. Y el segundo configura elhistory -acomando para ejecutarse en cada indicador de shell. El-aescribe inmediatamente las actuales nuevas líneas / en el archivo histórico.Relacionado con zsh:
fuente
Intenta poner esto en tu
.bashrc:Crédito aquí: https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135
history -cborra el historial de la sesión en ejecución. Esto reducirá el contador de historial en la cantidad de$HISTSIZE.history -rlea el contenido$HISTFILEe insértelos en el historial actual de la sesión en ejecución. Esto aumentará el contador del historial por la cantidad de líneas$HISTFILE.Creo que significa que los comandos están disponibles casi de inmediato (tiene un terminal, escritura
echo 1, segundo terminalecho 2, primeroecho 3y al presionar la flecha hacia abajo dos veces, debería tenerecho 2disponible. Debe emitir un comando en un terminal determinado para tener acceso a lo que tiene ha sido escritofuente
man history...bashincorporado, por lo que se describe enman bash. También puedes usarhelp history.-ry-cvs simplemente tener-a.history -c; history -r? Supongo que es mejor para ti, sería mejor para mí solo a veces, a menudo uso varios proyectiles para hacer un trabajo, así que prefiero tener el historial lo más combinado posible. De hecho, me importa que el comando se escriba en la historia solo después de que termine. normalmente, cuando inicio una sesión ssh en un host y quiero abrir otra mientras la primera aún se está ejecutando, tengo que volver a escribirla porque aún no se ha escrito en el historial.history -apodría ser suficienteTengo un archivo de historial grande con aproximadamente 100000 entradas, y las variantes que borran la lista de historial y leen todo el archivo de historial (usando
history -cyhistory -r) introducen un retraso notable (quizás 0.2 segundos) antes de que se muestre el mensaje. El usohistory -npara que solo se lean nuevas líneas del archivo de historial es más rápido:PROMPT_COMMANDno tiene que exportarse porque es una variable de shell.fuente
Una nota para todas las demás respuestas (que son básicamente lo mismo):
Establecer
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"en el.bashrc(o amigos) es suficiente.Además, puede ejecutar manualmente
history -acada vez que quiera "capturar" el historial en la sesión actual.El comando
shopt -s histappendno es necesario porquehistory -asiempre agrega nuevas líneas al archivo y nunca lo sobrescribe. Además, al menos a partir de Bash 4,histappendes el comportamiento predeterminado.fuente
shopt -s histappend. También tenga en cuenta que lo agregué a mi~/.bash_profilehistappend, ya que ese es el comportamiento predeterminado. Lo buscaría, pero no tengo acceso a una Mac.