Preserve el historial de tcsh en múltiples ventanas de terminal

8

¿Cómo podemos preservar o mantener el mismo historial en múltiples terminales?

La misma pregunta, pero para bash shell, se discutió en el siguiente enlace

Preserve el historial de bash en múltiples ventanas de terminal

déjame saber la configuración correspondiente para tcsh shell?

usuario1228191
fuente
Para obtener más información sobre tcsh history, consulte man tcsh. La búsqueda history -Sdebería saltar a la parte más relevante.
Randall

Respuestas:

7

Estas variables configuran el historial para fusionarse en lugar de sobrescribir, y no guardar duplicados:

set history=1000
set histdup=erase
set savehist=(1000 merge)

La salsa secreta es esta línea:

alias precmd 'history -S; history -M'

que guardará y combinará su historial antes de imprimir la solicitud, es decir, después de cada comando que escriba.

todo lo anterior debe agregarse a su archivo .tcshrc .

Idan
fuente
Cuando agregué esto, alias precmd 'history -S; history -M'no ocurrió nada cuando escribí cualquier comando. ¿Hay algo más que deba hacerse?
Ayman Salah
@AymanSalah lo que ocurre no es obvio: es el .historyarchivo (o el histfilevalor de la variable de shell, si está configurado) que se escribe en el disco. Sin el precmdconjunto de alias, ls -l .historymostrará el .historyarchivo como intacto. Con el precmd conjunto anterior, ls -l .historymostrará la marca de tiempo y el tamaño actualizados, a medida que se escribe con cada comando.
Randall
@Randall Gracias por señalar eso. Tuve problemas con la sesión de shell. Lo que estás diciendo es 100% correcto.
Ayman Salah
1

Además de la respuesta de Idan , quiero agregar que alias precmd 'history -S; history -M'potencialmente puede estropear el archivo de historial, ya que también registra la señal SIGINT y EOF (Ctrl + C y Ctrl + D).

ingrese la descripción de la imagen aquí

Una mejor manera sería guardar y fusionar el historial de shell actual después de ejecutar un comando.

Puede lograrlo con esta configuración a continuación, ya que tcsh no reconoce SIGINT o EOF como un comando válido.

alias postcmd       "history -S; history -M"
berong91
fuente