Comment puis-je demander au terminal de conserver un historique séparé par onglet / fenêtre?


13

Lorsque je redémarre mon Mac, il se ferme et enregistre correctement les tampons pour chaque onglet, car il est de nouveau présent lorsque l'ordinateur redémarre. Mais l'historique des commandes n'est pas correctement mis en mémoire tampon par fenêtre / onglet. Ils sont tous le même tampon.

Je suppose que c'est parce que bash utilise la même chose ~/.bash_historypour tous les terminaux, mais existe-t-il un moyen d' éviter d' améliorer cela? Pour faire bash, ou peut-être Terminal, les stocker séparément?


Veuillez consulter cet article @ Server Fault, il explique comment procéder.
Mutant

Réponses:


7

Vous pouvez faire quelque chose comme ça dans votre .bashrc:

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

Cela créera des fichiers d'historique séparés dans votre répertoire personnel tels que .bash_history_ttys002. Lorsque vous créez une nouvelle fenêtre de terminal, elle utilise le fichier d'historique correspondant au nom du terminal, qui est généralement déterminé simplement par l'ordre dans lequel vous créez les fenêtres de terminal.


Grand merci! Marquer cela comme résolu. Même si cela dépend de la façon dont OSX charge les terminaux, j'ai le sentiment que c'est le plus proche possible.
Robert Sköld

Est-ce également possible par onglet ??
Joshua Muheim

Chaque onglet est une connexion tty distincte, donc cela devrait fonctionner.
Seth Noble

Le terminal prend explicitement en charge ce type de comportement: lorsqu'il crée un nouveau terminal, il attribue au terminal un ID unique et le communique à la session du terminal via la variable d'environnement TERM_SESSION_ID. Lorsqu'il restaure un terminal pour la reprise, il restaure également le même ID de session afin que les programmes puissent l'utiliser pour associer un état arbitraire aux terminaux restaurés. Utilisez-le dans le nom du fichier au lieu du tty.
Chris Page

@ChrisPage le problème avec ceci est que la session est différente chaque fois que vous lancez une fenêtre / un onglet. Ainsi, cela créerait des histoires distinctes et ne les lierait pas entre les sessions.
René Wooller

5

J'ai implémenté cela en ajoutant

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

à mon ~/.bash_profiledossier. Maintenant, lorsque je ferme le terminal et l'ouvre à nouveau, chaque onglet a son historique de commandes distinct restauré. De plus, lorsque je crée un nouvel onglet, l'historique par défaut est initialisé à partir de.bash_history

De plus, pour que l' Terminalapplication conserve les onglets ouverts entre la fermeture et le redémarrage, vous devez vous assurer que cette option "close windows when quitting app" (on Yosemite)est désactivée dans System Preferences -> General.


0

Vous pouvez définir un $ HISTFILE personnalisé pour chacune de vos instances de terminal.


Existe-t-il un moyen de le faire automatiquement pour chaque onglet / fenêtre Terminal? Et assurez-vous qu'il utilise la même chose $HISTFILElorsque l'ordinateur redémarre?
Robert Sköld

1
Oui, il est possible de le faire, mais comment accéderiez-vous à nouveau? Vous devez jongler manuellement avec les fichiers pour accéder aux fichiers d'historique précédents.
EmmEff

@EmmEff Terminal prend explicitement en charge ce type de comportement: lorsqu'il crée un nouveau terminal, il attribue au terminal un ID unique et le communique à la session du terminal via la variable d'environnement TERM_SESSION_ID. Lorsqu'il restaure un terminal pour la reprise, il restaure également le même ID de session afin que les programmes puissent l'utiliser pour associer un état arbitraire aux terminaux restaurés.
Chris Page
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.