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


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.


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

-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'

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.