Conserver l'historique tcsh dans plusieurs fenêtres de terminal

8

Comment pouvons-nous conserver ou maintenir la même histoire sur plusieurs terminaux?

La même question, mais pour bash shell, a été discutée dans le lien ci-dessous

Conserver l'historique de bash dans plusieurs fenêtres de terminal

laissez-moi savoir les paramètres correspondants pour le shell tcsh?

user1228191
la source
Pour plus d'informations sur les tcsh history, voir man tcsh. La recherche history -Sdevrait vous faire passer à la partie la plus pertinente.
Randall

Réponses:

7

Ces variables définissent l'historique pour qu'il se fusionne au lieu de l'écraser et ne sauvegarde pas les doublons:

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

la sauce secrète est cette ligne:

alias precmd 'history -S; history -M'

qui enregistrera et fusionnera votre historique avant d'imprimer l'invite - c'est-à-dire après chaque commande que vous tapez.

tout ce qui précède doit être ajouté à votre fichier .tcshrc .

Idan
la source
Lorsque j'ai ajouté cela, alias precmd 'history -S; history -M'rien ne s'est produit lorsque j'ai écrit une commande. Y a-t-il autre chose à faire?
Ayman Salah
@AymanSalah ce qui se produit n'est pas évident - c'est le .historyfichier (ou la histfilevaleur de la variable shell, si définie) qui est écrit sur le disque. Sans le precmdjeu d'alias, ls -l .historyaffichera le .historyfichier comme intact. Avec precmd défini comme ci-dessus, ls -l .historyaffichera l'horodatage et la taille mis à jour, tels qu'ils sont écrits avec chaque commande.
Randall
@Randall Merci de l'avoir signalé. J'ai alors eu des problèmes avec la session shell. Ce que vous dites est 100% correct.
Ayman Salah
1

En plus de la réponse d'Idan , je veux ajouter que cela alias precmd 'history -S; history -M'peut potentiellement gâcher le fichier historique, car il enregistre également le signal SIGINT et EOF (Ctrl + C et Ctrl + D).

entrez la description de l'image ici

Une meilleure façon serait de sauvegarder et de fusionner l'historique actuel du shell après avoir exécuté une commande.

Vous pouvez y parvenir à l'aide de cette configuration ci-dessous, car le tcsh ne reconnaît pas SIGINT ou EOF comme une commande valide.

alias postcmd       "history -S; history -M"
berong91
la source