Verstümmelte Geschichte

15

Wie schreiben die Terminals im GUI-Modus die Verlaufsdatei dieses Benutzers neu, wenn für einen Benutzer mehr als ein Terminal geöffnet ist? Der Grund, den ich frage, ist, dass es durchaus möglich ist, dass der Benutzer in jedem der Terminals unterschiedliche Befehle ausführt. Speichert die Verlaufsdatei also die Befehle aller Terminals oder nur der ersten, die geöffnet werden? Oder gibt es eine andere Methode, um diese Situation anzugehen?

Jay
quelle

Antworten:

11

Es hängt ganz davon ab, wie die Shell damit umgeht

bashStandardmäßig wird die Verlaufsdatei mit dem lokalen Verlauf jeder Shell beim Beenden überschrieben, sodass die letzte Shell, die beendet wird, gewinnt. Die histappendOption bewirkt, dass es stattdessen an den Master-Verlauf angehängt wird ( shopt -s histappend).

zsh macht das selbe standardmäßig und hat ein paar Optionen, um damit umzugehen:

  • appendhistory - Der Verlauf jeder Shell wird beim Beenden der Shell an die Master-Verlaufsdatei angehängt
  • incappendhistory - Die Hauptverlaufsdatei wird jedes Mal aktualisiert, wenn eine Zeile in einer Shell ausgeführt wird, anstatt zu warten, bis diese Shell beendet wird
  • sharehistory- Wie incappendhistory, zieht aber auch Änderungen aus der Master-History-Datei in alle laufenden Shells, sodass Sie einen Befehl in einer Shell ausführen und dann Upin einer anderen Shell drücken und sehen können
Michael Mrozek
quelle
Jetzt sag mir bitte, wie das in Bash geht;)
tante
1
@tante Funktioniert shopt -s histappendnicht?
Michael Mrozek
0

Ich hatte diese Idee ursprünglich aus dem O'Reilly-Buch "Unix Power Tools".

In meinem .profilesetze ich:

export HISTFILE=$HOME/.sh_hist.$$

Jedes Mal, wenn ich .profilegelesen werde, erhalte ich eine neue Verlaufsdatei mit der PID meiner Sitzung. Wenn ich mehrere Anmeldungen habe, erhält jede Anmeldung eine eindeutige Verlaufsdatei. Funktioniert in kshund bash.

Wenn Sie in einer X-Sitzung nur neue Terminals öffnen, handelt es sich normalerweise nicht um Anmeldeshells. Sie können sie jedoch so konfigurieren, dass sie als Anmeldeshells fungieren. Zum Beispiel rxvt +lswird rxvtals Login-Shell gestartet . Überprüfen Sie die Dokumentation für jedes Terminal, das Sie verwenden.

Auch wenn Sie nicht eine .logoutoder .bash_logoutDatei (oder ein anderes Mittel) zum Bereinigen verwenden, werden Sie irgendwann eine Menge .sh_histDateien haben.

Mazianni
quelle
0

tcsh: set savehist = (5000 merge)verschmilzt

user39122
quelle