Wie kann ein separater Befehlsverlauf für verschiedene Sitzungen für denselben Benutzer erstellt werden?

8

Ich habe dieses Problem auf einigen Unix-Servern. Wenn ich eine andere Sitzung für denselben Benutzer öffne, wird der Befehlsverlauf von der gesamten Sitzung gemeinsam genutzt. Dies führt zu Problemen, wenn ich versehentlich Ctrl-Poder drücke up arrowund einfach die Eingabetaste drücke. Einmal lief ich rm -rf *dankenswerterweise in einem Verzeichnis, in dem ich keine Berechtigung zum Entfernen von Dateien habe.

Wie kann ein separater Befehlsverlauf für verschiedene Sitzungen für denselben Benutzer erstellt werden? Die meiste Zeit benutze ich ksh- und tcsh-Shells.

Hemant
quelle

Antworten:

8

Aus der ksh-FAQ :

Q1. Wie erhalte ich separate Verlaufsdateien für die Shell?

A1. ksh verwendet eine gemeinsam genutzte Verlaufsdatei für alle Shells, die denselben Namen für die Verlaufsdatei verwenden. Dies bedeutet, dass in einem Fenster eingegebene Befehle von Shells in anderen Fenstern angezeigt werden. Um separate Fenster zu erhalten, muss die Variable HISTFILE auf einen anderen Namen gesetzt werden, bevor der erste Verlaufsbefehl erstellt wird.

theotherreceive
quelle
11

Sie können HISTFILE=~/.hist$$zu Ihrem hinzufügen .profile. Dies sollte eine eindeutige Datei pro Sitzung generieren.

Sie werden am Ende eine große Anzahl von haben, .hist*daher schlage ich vor, dass Sie sie gelegentlich entfernen.

Gert
quelle
2

Ich gehe davon aus, dass Sie über gleichzeitige Sitzungen sprechen. Das Trennen von Sitzungen nacheinander ist nicht sehr nützlich: Sie könnten den Verlauf nie mehr verwenden, da alle Sitzungen eindeutig wären. Wenn dies der Fall wäre, wäre es wahrscheinlich besser, nur den Befehlsverlauf zu deaktivieren.

Wenn wir über das Trennen der gleichzeitigen Sitzung sprechen, würde ich die Verwendung von Bash empfehlen. Ich bin mir ziemlich sicher, dass ich den Befehlsverlauf nicht aus zwei gleichzeitig gemischten Sitzungen erhalte. Bash schreibt den Verlauf nur .bash_historybeim Abmelden in, sodass der Befehlsverlauf erst nach dem Abmelden gemischt wird. Vorausgesetzt, dass die Verwendung von Bash akzeptabel ist, würde dies Ihr Problem lösen?

wzzrd
quelle
Danke für deine Antwort. Ich arbeite an HP-UX und es ist kein Bash installiert und ich habe keine Erlaubnis, es zu installieren :(.
Hemant
1

Ich werde etwas zu Gerts Antwort hinzufügen.

Gert's

Sie können Ihrem .profile HISTFILE = ~ / .hist $$ hinzufügen. Dies sollte eine eindeutige Datei pro Sitzung generieren.

Bergwerk

Sie können diese Dateien automatisch entfernen, indem Sie Folgendes hinzufügen.

trap 'rm ${HISTFILE}' exit

Robert Jacobs
quelle
2
Seien Sie etwas umsichtig in Bezug auf Ausgangsfallen - die Shell stapelt sie nicht so, wie Sie vielleicht hoffen -, sodass jede weitere Einstellung einer Ausgangsfalle alle vorherigen überschreibt. Ich habe einen Stapler für Fallen geschrieben, aber er hat fast jede mentale Zündschnur durchgebrannt, die ich hatte.
David Collier
-1

Sie könnten Bildschirm verwenden . Ich habe auch eine Variable erstellt, die durch mein Konsolenprofil definiert wurde, und jeder Sitzung eine andere Verlaufsdatei zugewiesen , nur so, wie ich es mir vorstellen kann.

Xenoterracid
quelle
Ich kann den Bildschirm nicht installieren. Es wird nicht einmal auf meinem Server kompiliert.
Hemant
Ich bin mir nicht sicher, wie der Bildschirm Ihnen diese Fähigkeit überhaupt geben würde
Michael Mrozek
@Michael Sie können verschiedene Sitzungen mit Bildschirm haben und Bildschirm hat seine eigene Geschichte. Ich weiß nicht, dass mir jemand gesagt hat, ich solle mein Problem mit dem Bildschirm lösen ... Ich mochte den Bildschirm nicht. lahm, dass dies heruntermodifiziert wurde, als meine zweite Antwort im Wesentlichen dieselbe war wie die anderen, die hochmodifiziert wurden. @Hemant ... und das sollte ich wissen? Ich benutze keinen Bildschirm, um dies auf meinem System zu tun. Ich weiß nur, dass es einen ähnlichen Effekt ermöglicht, der richtig gemacht wird.
Xenoterracide
Ich glaube, ich weiß, was Sie beschreiben, aber es ist keine Bildschirmfunktion, sondern nur ein Nebeneffekt der Funktionsweise von Muscheln. Wenn Sie zwei Shells öffnen, werden die eingegebenen Befehle nicht im Verlauf des anderen angezeigt, es sei denn, die Shell unterstützt dies ausdrücklich (z. B. ZSH, Sie müssen es jedoch explizit aktivieren). Es werden keine separaten Historien gespeichert, beide schreiben in die Hauptverlaufsdatei. Sie können die Änderungen von jeder Shell nicht sehen, da Shells nach dem Laden normalerweise nicht nach Änderungen der Verlaufsdatei suchen
Michael Mrozek
@MichaelMrozek Die Korn-Shell hat einen gemeinsamen Verlauf für alle Fenster, dieser kann nicht deaktiviert werden. Die Verwendung screenhilft überhaupt nicht.
FUZxxl