Wie kann ich das Terminal dazu bringen, einen separaten Verlauf pro Registerkarte / Fenster zu führen?

13

Wenn ich meinen Mac neu starte, werden die Puffer für jede Registerkarte ordnungsgemäß beendet und gespeichert, da sie beim Neustart des Computers wieder vorhanden sind. Der Befehlsverlauf wird jedoch pro Fenster / Registerkarte nicht richtig gepuffert. Sie sind alle der gleiche Puffer.

Ich nehme an, es ist , weil bash das gleiche verwendet ~/.bash_historyfür alle Endgeräte , aber ist es eine Möglichkeit zu vermeiden , dies zu verbessern? Um Bash oder vielleicht Terminal zu machen, speichern Sie sie separat?

Robert Sköld
quelle
Bitte lesen Sie diesen Beitrag @ Server Fault, in dem erklärt wird, wie das geht.
Mutant

Antworten:

7

Sie könnten so etwas in Ihrem tun .bashrc:

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

Dadurch werden separate Verlaufsdateien in Ihrem Home-Verzeichnis erstellt, z .bash_history_ttys002. Wenn Sie ein neues Terminalfenster erstellen, wird die Verlaufsdatei verwendet, die dem tty-Namen entspricht. Diese wird normalerweise einfach durch die Reihenfolge bestimmt, in der Sie die Terminalfenster erstellen.

Seth Noble
quelle
Vielen Dank! Markieren Sie dies als gelöst. Obwohl es irgendwie davon abhängt, wie OSX die Terminals lädt, habe ich das Gefühl, dass dies der nächste ist, den wir bekommen können.
Robert Sköld
Ist das auch per Tab möglich ??
Joshua Muheim
Jede Registerkarte ist ein separates tty-Login, daher sollte es funktionieren.
Seth Noble
Das Terminal unterstützt diese Art von Verhalten ausdrücklich: Wenn es ein neues Terminal erstellt, weist es dem Terminal eine eindeutige ID zu und übermittelt sie über die Umgebungsvariable TERM_SESSION_ID an die Terminalsitzung. Wenn ein Terminal für Resume wiederhergestellt wird, wird auch dieselbe Sitzungs-ID wiederhergestellt, sodass Programme diese verwenden können, um wiederhergestellten Terminals einen beliebigen Status zuzuordnen. Verwenden Sie dies als Teil des Dateinamens anstelle des tty.
Chris Seite
@ChrisPage Das Problem dabei ist, dass die Sitzung jedes Mal anders ist, wenn Sie ein Fenster / eine Registerkarte starten. Es würde also separate Historien erstellen und diese nicht über Sitzungen hinweg verknüpfen.
Rene Wooller
5

Ich habe dies durch Hinzufügen implementiert

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

zu meiner ~/.bash_profileDatei. Wenn ich nun das Terminal schließe und wieder öffne, wird für jede Registerkarte ein separater Befehlsverlauf wiederhergestellt. Auch wenn ich eine neue Registerkarte erstelle, wird der Standardverlauf von initialisiert.bash_history

Um die TerminalApp so zu gestalten, dass geöffnete Registerkarten zwischen Beenden und Neustart erhalten bleiben, müssen Sie sicherstellen, dass diese Option "close windows when quitting app" (on Yosemite)in deaktiviert ist System Preferences -> General.

Mikael Lepistö
quelle
0

Sie können für jede Terminal-Instanz eine benutzerdefinierte $ HISTFILE festlegen.

Vlad
quelle
Gibt es eine Möglichkeit, dies automatisch für jede Registerkarte / jedes Terminalfenster zu tun? Und stellen Sie sicher, dass es dasselbe verwendet, $HISTFILEwenn der Computer wieder gestartet wird?
Robert Sköld
1
Ja, das ist möglich, aber wie würden Sie dann wieder darauf zugreifen? Sie müssten Dateien manuell jonglieren, um zu den vorherigen Verlaufsdateien zu gelangen.
EmmEff
@EmmEff Terminal unterstützt diese Art von Verhalten explizit: Wenn es ein neues Terminal erstellt, weist es dem Terminal eine eindeutige ID zu und teilt sie der Terminalsitzung über die Umgebungsvariable TERM_SESSION_ID mit. Wenn ein Terminal für Resume wiederhergestellt wird, wird auch dieselbe Sitzungs-ID wiederhergestellt, sodass Programme diese verwenden können, um wiederhergestellten Terminals einen beliebigen Status zuzuordnen.
Chris Seite