Bash-Verlauf für die aktuelle Sitzung

15

Vielleicht habe ich etwas übersehen, aber es gibt eine Möglichkeit, Ihren aktuellen Bash-Verlauf für die aktuelle Sitzung abzurufen, die Sie verwenden

Wenn ich renne

ssh host
$ pwd
$ ls
$ cd /tmp

Ich möchte nur diese 3 Befehle sehen und sonst nichts

Mike
quelle
Hast du den historyBefehl überprüft ?
Hackaholic
ya ich weiß, historyaber das gibt nicht nur meine Sitzung
Mike
Der zwischen Sitzungen gespeicherte Betrag wird von der SAVEHIST-Shell-Variablen gesteuert, wenn ich mich erinnere. Wenn die Menge an Verlauf, die Sie das letzte Mal gespeichert haben, NULL war, dann würden Sie den Verlauf für die aktuelle Shell-Sitzung erhalten (aber natürlich nicht auf den Unterebenen)
mdpc
@mdpc, welche Dokumente lesen Sie? In der Bash-Manpage finde ich keinen Verweis auf SAVEHIST, sondern nur auf HISTSIZEund HISTFILESIZE.
Wildcard

Antworten:

15

Ein kleiner Umweg:

history -a ~/current_history

Dadurch wird der nicht gespeicherte Bash-Verlauf der aktuellen Sitzung in gespeichert ~/current_history, den Sie dann anzeigen können.

muru
quelle
Dies könnte funktionieren, aber es werden nicht mehrere Sitzungen verarbeitet. Ich nehme an, ich kann eine zufällige temporäre Datei erstellen, um sie zu speichern
Mike
1
@Mike verwenden möglicherweise einen Namen, der mit der Shell-PID verbunden ist ~/$$_history.
muru
4
Es ist erwähnenswert, dass dies den Verlauf nicht löscht oder die normale Verlaufsspeicherung in irgendeiner Weise beeinflusst! Ich war mir nicht sicher, bis ich es getestet habe. :)
NHDaly
Ich finde es bequemer, es einfach zu tun history -aund zusammen mit der vorherigen Historie in ~ / .bash_history zu werfen. Dies könnte ein Problem sein, wenn Ihre Historie länger ist als der Cutoff, der 1000 auf meinen Centos7- und Fedora 24-Systemen beträgt.
Ray Foss
0

Ich hatte das Problem, dass ich den aktuellen historyin eine Datei schreiben wollte, aber trotzdem wollte, dass die Einträge in der Haupt-Bash aufgezeichnet werdenhistory

Ich löste dieses Problem, indem ich die Datei einfach anhängte mit cat:

history -a current-history
cat current-history >> .bash_history
nath
quelle
-1

Verwenden Sie compdiese Option , um den gesamten Verlauf (einschließlich der aktuellen Bash-Sitzung) mit dem bereits vorhandenen Verlauf in zu vergleichen .bash_historyund nur die Zeilen zu drucken, die für die aktuelle Sitzung eindeutig sind. In diesen Zeilen sollten nur die Befehle angezeigt werden, die seit dem Starten der aktuellen Bash-Shell ausgeführt wurden

comm -23 <( history | cut -c 8- ) ~/.bash_history

Edit: wie @Wildcard hervorhob, funktioniert dieser Befehl nicht für alle Distributionen von comm. Ich habe dies unter Mac OS getestet.

Eine Variation der gleichen Idee mit diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'
Christian Kadner
quelle
Ein guter Gedanke, aber in meinen Tests sehr unzuverlässig. commsetzt sortierte Eingabe voraus. Willkommen bei Stack Exchange! :)
Wildcard
@Wildcard, beide Seiten der Eingabe commwerden in meinem obigen Beispiel inhärent sortiert. Hast du es ausgeführt? Und es wurde nicht Ihr aktueller Bash-Sitzungsverlauf erstellt?
Christian Kadner
Ja, das habe ich getan und nein, das habe ich nicht getan. Und nein, der Inhalt von ~/.bash_historywird nicht sortiert; und die Ausgabe von wird überhaupt nicht historysortiert, sobald führende Zeilennummern entfernt sind. (Außerdem werden commlexikografisch sortierte Eingaben erwartet, nicht numerisch sortierte Eingaben.)
Wildcard
Richtig, ich habe gemeint, dass beide Argumente für den commBefehl in meinem Beispiel in derselben Reihenfolge sind, nicht dass sie lexikografisch sortiert sind. Die FreeBSD-Version von commerfordert keine lexikografisch sortierte Eingabe
Christian Kadner
Ich benutze Mac OS X. Das hat nichts damit zu tun. Bei näherer Betrachtung scheint es sich um die frühen Befehle aus der In-Memory-Historie zu handeln, die seitdem von anderen Shells , die beendet wurden, in der History- Datei überschrieben wurden .
Wildcard