¿Cómo puedo hacer que la Terminal mantenga un historial separado por pestaña / ventana?

13

Cuando reinicio mi Mac, se cierra y guarda los búferes para cada pestaña correctamente, ya que está allí nuevamente cuando la computadora se reinicia. Pero el historial de comandos no está almacenado correctamente por ventana / pestaña. Todos son el mismo amortiguador.

Supongo que es porque bash usa lo mismo ~/.bash_historypara todas las terminales, pero ¿hay alguna manera de evitar mejorar esto? Para hacer bash, o tal vez Terminal, ¿almacenarlos por separado?

Robert Sköld
fuente
Consulte esta publicación @ Falla del servidor, explica cómo hacer esto.
Mutante

Respuestas:

7

Podrías hacer algo como esto en tu .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

Esto creará archivos de historial separados en su directorio de inicio como .bash_history_ttys002. Cuando crea una nueva ventana de terminal, utilizará el archivo de historial correspondiente al nombre de tty, que generalmente se determinará simplemente por el orden en que cree las ventanas de terminal.

Seth Noble
fuente
¡Muchas gracias! Marcar esto como resuelto. Aunque depende de cómo OSX carga los terminales, tengo la sensación de que esto es lo más cerca que podemos llegar.
Robert Sköld
¿Esto también es posible por ficha?
Joshua Muheim
Cada pestaña es un inicio de sesión tty separado, por lo que debería funcionar.
Seth Noble
El terminal tiene soporte explícito para este tipo de comportamiento: cuando crea un nuevo terminal, asigna al terminal un ID único y lo comunica a la sesión del terminal a través de la variable de entorno TERM_SESSION_ID. Cuando restaura un terminal para Reanudar, también restaura la misma ID de sesión para que los programas puedan usar esto para asociar un estado arbitrario con terminales restaurados. Use esto como parte del nombre del archivo en lugar de tty.
Chris Page
@ChrisPage el problema con esto es que la sesión es diferente cada vez que inicia una ventana / pestaña. Por lo tanto, crearía historias separadas y no las vincularía entre sesiones.
Rene Wooller
5

Implementé esto agregando

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

a mi ~/.bash_profilearchivo Ahora, cuando cierro el terminal y lo vuelvo a abrir, cada pestaña tiene su historial de comandos separado restaurado. Además, cuando creo una nueva pestaña, el historial predeterminado se inicializa desde.bash_history

Además, para hacer que la Terminalaplicación conserve las pestañas abiertas entre salir y reiniciar, debe asegurarse de que esa opción "close windows when quitting app" (on Yosemite)esté deshabilitada System Preferences -> General.

Mikael Lepistö
fuente
0

Puede establecer un $ HISTFILE personalizado para cada una de sus instancias de Terminal.

Vlad
fuente
¿Hay alguna manera de hacer esto automáticamente para cada pestaña / ventana de Terminal? ¿Y asegúrate de que esté usando lo mismo $HISTFILEcuando la computadora se reinicie?
Robert Sköld
1
Sí, es posible hacer esto, pero ¿cómo accedería nuevamente? Tendría que hacer malabarismos con los archivos manualmente para acceder a los archivos del historial anterior.
EmmEff
@EmmEff Terminal tiene soporte explícito para este tipo de comportamiento: cuando crea un nuevo terminal, le asigna un ID único y lo comunica a la sesión del terminal a través de la variable de entorno TERM_SESSION_ID. Cuando restaura un terminal para Reanudar, también restaura la misma ID de sesión para que los programas puedan usar esto para asociar un estado arbitrario con terminales restaurados.
Chris Page