Wie kann man bash (Terminal.app) an den Verlauf früherer Sitzungen erinnern?


11

In meinem Computer bei der Arbeit merkt sich meine Bash-Shell den Verlauf früherer Sitzungen, auch wenn ich gerade ein neues Terminal geöffnet habe.
In meinem Computer zu Hause passiert dies nicht.
Ich habe auf beiden Computern dasselbe Betriebssystem 10.6.8 und keine Einstellung zum Verlauf .bash_profile.
Wie kann ich dies auf meinem Heimcomputer einrichten, damit der Sitzungsverlauf über die Sitzungen hinweg gespeichert wird?



Antworten:


11

Sie müssen bash mitteilen, wo Ihre Verlaufsdatei aufbewahrt werden soll und wie viele Zeilen aufbewahrt werden sollen:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile

3
Das sollte standardmäßig alles unnötig sein. Die Standard-Bash-Konfiguration (zumindest unter Mac OS X) aktiviert den Befehlsverlauf.
Chris Seite

Schlüsselwort, / sollte /. Wenn er keinen Verlauf aufzeichnet, wird bash gezwungen, den Verlauf auf init zu halten.
Aaron Lake

2
Dies sollte nicht nur geschehen , sondern wird es auch tun , es sei denn, es wurde etwas unternommen, um das Standardverhalten des Verlaufs zu unterdrücken. In diesem Fall wird nur das eigentliche Problem dokumentiert, wenn nur einige Werte in diese Variablen eingegeben werden. Wenn diese Antwort das Problem behebt, ist etwas anderes wirklich durcheinander und sollte behoben werden, um andere Probleme zu vermeiden.
Chris Seite

Sie können diese Einstellungen vornehmen, aber ich habe eine einfachere Lösung / Antwort gefunden, wenn Sie nur den Verlauf auf dem Terminal "aktivieren" möchten. Es hat einfach gut funktioniert für mich apple.stackexchange.com/a/220667/243988 (ich benutze macOS High Sierra)
jpruizs

4

Ich habe gerade festgestellt, dass ich ein ähnliches Problem hatte, obwohl mein Arbeitgeber nur zwei Macs hat und keiner auf meinem Schreibtisch sitzt . Inakzeptabel, aber ein Kampf für eine andere Zeit.

Wie auch immer, zu Hause hat Mac Mini (von MacBook Pro migriert) auch nach dem Einstellen .bashrcund / oder nicht zusammengearbeitet .profile. Dann entdeckte ich, dass meine ~/.bash_historyDatei auf mysteriöse Weise im Besitz von root war. Musste das machen:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Ja, ich weiß, dass dies mit weniger Befehlen möglich ist. Gewohnheit.)

Dann verließ ich Terminal und startete ein neues. Woot! Alle Arten von Geschichte, die zuvor verloren gegangen waren, kamen zurück. Wie sehr schön.

Wahrscheinlichkeit, dass jemand, der dies liest, sich versehentlich in diese Situation gebracht hat: 0,2%. Ich bin mir sicher, dass ich das durcheinander gebracht habe, als ich etwas anderes eifrig "repariert" habe.


4

Ich hatte dieses Problem und für mich funktionierte es, eine Datei zu erstellen, die .bash_sessions_disablein meinem Benutzerordner ( ~/) aufgerufen wurde .

Grundsätzlich erstellt OS X Verlaufsdateien im .bash_sessionsOrdner für jede Sitzung (in meinem Fall eine für jede Registerkarte). Und selbst wenn diese Sitzungen ordnungsgemäß geschlossen werden, spielt OS X den Verlauf nicht erneut ab .bash_history.

Wenn .bash_sessions_disableSie das erstellen, deaktivieren Sie dieses Verhalten.

touch ~/.bash_sessions_disable

Das Deaktivieren des Befehlsverlaufs pro Sitzung - das Standardverhalten - ist das Gegenteil von dem, was gefragt wird.
Chris Seite

@ChrisPage Das ist nur richtig, wenn der Fragesteller nach Sitzungsverläufen fragt, was anscheinend nicht der Fall ist ("Verlauf über Sitzungen hinweg merken"). Deaktivieren des Verhaltens von Bash-Sitzungen AKTIVIERT die Wiedergabe eines einzelnen Verlaufs in, .bash_historyanstatt den Verlauf im .bash_sessions/Ordner zu behalten . Dies ist imho die richtige Antwort.
Matt H

@MattH Bei der Frage wird gefragt, wie der Verlauf wieder funktioniert, da er anscheinend überhaupt nicht funktioniert und das Deaktivieren dieser Funktion für den Sitzungsverlauf pro Sitzung nicht in die richtige Richtung geht. Wenn der Sitzungsverlaufsmechanismus einen Fehler enthält, sollte jemand einen Fehlerbericht einreichen, aber eine Antwort so zu präsentieren, als ob das Deaktivieren für alle Benutzer im Allgemeinen richtig wäre, ist… falsch. Normalerweise funktioniert es einwandfrei. Weitere Informationen finden Sie in meinen Kommentaren zu den verschiedenen Antworten.
Chris Seite

Ich hätte dies auch erwähnen sollen, als ich anfänglich kommentierte: Das Deaktivieren des gesamten Bash-Speicher- / Wiederherstellungsmechanismus ist als letzter Ausweg gedacht und sollte nach Möglichkeit vermieden werden. Sie können lediglich das Verhalten des Befehlsverlaufs pro Sitzung deaktivieren, indem Sie den Wert SHELL_SESSION_HISTORYauf 0 setzen, wie in dokumentiert /etc/bashrc_Apple_Terminal.
Chris Seite

1

Diese Antwort aus diesem Reddit-Thread hat mich gerettet:

Es ist wahrscheinlich RVM, das verhindert, dass der Exit "Hook" für bash_sessions ausgeführt wird. Wenn Sie die folgende Zeile in Ihrem .bash_profile auskommentieren, sollte dies funktionieren.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

0

Ich hatte auch ein ähnliches Problem, keine Geschichte aufgezeichnet. Die angegebenen Lösungen funktionierten nicht, aber schließlich stellte ich fest, dass das Problem so einfach war wie eine fehlende .bash_history

Die Lösung bestand darin , zu gehen /home/[username]/und eine Datei hinzufügen .bash_history, so

nano .bash_history

Geben Sie dann etwas in die Datei ein (andernfalls wird es nicht erstellt), beenden Sie es und speichern Sie es. Danach begann der Verlauf normal zu funktionieren.


Wenn das Problem dadurch behoben wird, stimmt etwas anderes nicht und sollte behoben werden, um andere Probleme zu vermeiden. Wenn Sie Bash starten, wenn keine Verlaufsdatei vorhanden ist, wird eine erstellt. Wenn nicht versucht wird, eines zu erstellen, oder wenn es nicht erstellt werden kann, stimmt etwas mit einem Shell-Startskript oder den Berechtigungen für das Ausgangsverzeichnis nicht. Siehe zum Beispiel die Antwort: apple.stackexchange.com/a/118764/6883
Chris Seite
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.