A menudo abro muchísimos terminales (en este momento, tengo siete abiertos en este espacio de trabajo) y a menudo busco history
con grep
para encontrar un comando que acabo de escribir recientemente, pero no quiero buscar el terminal y luego desplazarme Levántate y búscalo.
A veces mis terminales se cierran sin exit
, y todo lo que he escrito en ellos se pierde. A veces necesitaba algo que había escrito en una terminal que estaba muerta.
¿Hay alguna manera de lograr que cada terminal escriba .bash_history
inmediatamente? ¿O al menos una vez por minuto o algo así?
Respuesta1
Una solución simple se detalla enActualizar el historial de Bash en tiempo real.
Dice poner esos comandos en la configuración .bashrc:
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
El primer comando cambia el modo del archivo histórico para agregar y el segundo configura el history -a
comando para que se ejecute en cada símbolo del shell. La -a
opción hace que history
se escriban inmediatamente las líneas actuales/nuevas en el archivo histórico.
Deman bash
:
Si la opción de shell histappend está habilitada (consulte la descripción de shopt en COMANDOS INTEGRADOS DE SHELL a continuación), las líneas se agregan al archivo de historial; de lo contrario, el archivo de historial se sobrescribe.
Relacionado con Zsh:
Respuesta2
Intenta poner esto en tu .bashrc
:
shopt -s histappend # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
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értelo en el historial de la sesión en ejecución actual. Esto aumentará el contador del historial en la cantidad de líneas en $HISTFILE
.
Creo que significa que los comandos están disponibles casi de inmediato (tiene una terminal, escriba echo 1
, segunda terminal echo 2
, primero echo 3
y al presionar la flecha hacia abajo dos veces, debería tener echo 2
disponible. Debe emitir un comando en una terminal determinada para tener acceso a lo que tiene sido escrito.
Respuesta3
Tengo un archivo de historial grande con aproximadamente 100000 entradas, y las variantes que borran la lista del historial y leen todo el archivo del historial (usando history -c
y history -r
) introducen un retraso notable (tal vez 0,2 segundos) antes de que se muestre el mensaje. Usarlo history -n
para que solo se lean las líneas nuevas del archivo histórico es más rápido:
shopt -s histappend
PROMPT_COMMAND='history -a;history -n'
PROMPT_COMMAND
no es necesario exportarlo porque es una variable de shell.
Respuesta4
Una nota para todas las demás respuestas (que son básicamente lo mismo):
Establecerlo PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
en .bashrc
(o amigos) es suficiente.
Además, puede ejecutar manualmente history -a
cuando desee "hacer una instantánea" del historial de la sesión actual.
El comando shopt -s histappend
no es necesario porque history -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.