Yo muchas veces abiertos y mucha terminales [En este momento tengo 7 abierta en este espacio de trabajo] y yo busco a menudo history
con grep
encontrar 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-r
para realizar búsquedas inversas en el historial de comandos de un bash. Más conveniente que ahistory | grep
menos 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
.history
modo de archivo para agregar. Y el segundo configura elhistory -a
comando para ejecutarse en cada indicador de shell. El-a
escribe 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 -c
borra el historial de la sesión en ejecución. Esto reducirá el contador de historial en la cantidad de$HISTSIZE
.history -r
lea el contenido$HISTFILE
e 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 3
y al presionar la flecha hacia abajo dos veces, debería tenerecho 2
disponible. Debe emitir un comando en un terminal determinado para tener acceso a lo que tiene ha sido escritofuente
man history
...bash
incorporado, por lo que se describe enman bash
. También puedes usarhelp history
.-r
y-c
vs 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 -a
podrí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 -c
yhistory -r
) introducen un retraso notable (quizás 0.2 segundos) antes de que se muestre el mensaje. El usohistory -n
para que solo se lean nuevas líneas del archivo de historial es más rápido:PROMPT_COMMAND
no 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 -a
cada vez que quiera "capturar" el historial en la sesión actual.El comando
shopt -s histappend
no es necesario porquehistory -a
siempre agrega nuevas líneas al archivo y nunca lo sobrescribe. Además, al menos a partir de Bash 4,histappend
es el comportamiento predeterminado.fuente
shopt -s histappend
. También tenga en cuenta que lo agregué a mi~/.bash_profile
histappend
, ya que ese es el comportamiento predeterminado. Lo buscaría, pero no tengo acceso a una Mac.