[aufgewärmt gelöst] .bash_history

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

[aufgewärmt gelöst] .bash_history

Beitrag von dasebastian » 20.03.2021 09:57:51

Ich wollte mich eigentlich an einen Thread anhängen, der das gleiche Thema behandelt, habe ihn jetzt aber nicht mehr gefunden :facepalm:

Folgendes in meiner ~/.bashrc ist definiert:

Code: Alles auswählen

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth:erasedups

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=500
HISTFILESIZE=500
Nachdem ich "erasedups" in der Zeile HISTCONTROL hinzugefügt habe, habe ich endlich tatsächlich auch keine doppelten Zeilen mehr in meiner History.

ABER das gilt nur für die jeweilige "Session" im Terminal, sprich, nach jedem Exit und wieder Start des Terminals, werden trotzdem die selben Befehle wieder in die History geschrieben:

Hier der Auszug aus der History:

Code: Alles auswählen

ll
cd Downloads
cd
ls
exit
cd Downloads
ls
ll
cd
exit
Kann ich das abstellen, so dass die History dann so aussähe?

Code: Alles auswählen

ll
cd Downloads
cd
ls
exit

Code: Alles auswählen

-rw-r--r--   1 sebastian sebastian  723 Mär 11 17:02 .bash_aliases
-rw-r--r--   1 sebastian sebastian  12K Mär 11 16:52 .bash_aliases.swp
-rw-------   1 sebastian sebastian   54 Mär 20 09:48 .bash_history
-rw-r--r--   1 sebastian sebastian  220 Jän  6 09:37 .bash_logout
-rw-r--r--   1 sebastian sebastian 3,3K Mär 18 16:21 .bashrc
Zuletzt geändert von dasebastian am 30.12.2021 09:23:05, insgesamt 3-mal geändert.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: .bash_history

Beitrag von tobo » 20.03.2021 10:06:59

dasebastian hat geschrieben: ↑ zum Beitrag ↑
20.03.2021 09:57:51
Kann ich das abstellen, [...]?
Ich denke nicht. Und zwar gilt das nicht für die jeweilige Session, sondern für unmittelbar aufeinander folgende Befehle. Das sollte "möglich" sein (ohne exit):

Code: Alles auswählen

cd
ls
cd
ls
Das nicht:

Code: Alles auswählen

ls
ls

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: .bash_history

Beitrag von dasebastian » 20.03.2021 10:34:06

tobo hat geschrieben: ↑ zum Beitrag ↑
20.03.2021 10:06:59
Ich denke nicht. Und zwar gilt das nicht für die jeweilige Session, sondern für unmittelbar aufeinander folgende Befehle.
OK. Das heisst, es wird in der History immer "nur" die letzte Session auf Doppelte kontrolliert?
Das sollte "möglich" sein (ohne exit):
In der jeweiligen Sitzung habe ich nach "erasedups" keine doppelten Zeilen mehr.

Konkret nervt mich, dass meine User-History oft so aussieht:

Code: Alles auswählen

su -
exit
su -
exit
.
.
.
.
.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: .bash_history

Beitrag von tobo » 20.03.2021 11:36:05

Das war nicht so ganz korrekt, was ich da eben geschrieben habe.
dasebastian hat geschrieben: ↑ zum Beitrag ↑
20.03.2021 10:34:06
tobo hat geschrieben: ↑ zum Beitrag ↑
20.03.2021 10:06:59
Ich denke nicht. Und zwar gilt das nicht für die jeweilige Session, sondern für unmittelbar aufeinander folgende Befehle.
OK. Das heisst, es wird in der History immer "nur" die letzte Session auf Doppelte kontrolliert?
ignoredups kontrolliert das letzte (abspeicherbare) Kommando auf eine Dublette zum Vorgängerkommando. Abspeichbar, weil man ja auch mittels HISTIGNORE Ausnahmen angeben kann, die dann überhaupt nicht in der History abgelegt werden. Wenn die Session beendet wird, wird in die ~/.bahs_history übertragen. Erstes neues Kommando und das letzte alte Kommando wird dann ebenfalls noch geprüft und womöglich entfernt.
erasedups kontrolliert auf Session-Ebene, lässt aber natürlich jeweils einen Eintrag stehen. Somit verstehe ich auch nicht wirklich, wieso bei dir nur su und exit vorhanden sein kann!?

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: .bash_history

Beitrag von dasebastian » 20.03.2021 11:51:33

tobo hat geschrieben: ↑ zum Beitrag ↑
20.03.2021 11:36:05
ignoredups kontrolliert das letzte (abspeicherbare) Kommando auf eine Dublette zum Vorgängerkommando. Abspeichbar, weil man ja auch mittels HISTIGNORE Ausnahmen angeben kann, die dann überhaupt nicht in der History abgelegt werden.
Über HISTIGNORE habe ich auch schon nachgedacht, es aber - bis jetzt zumindest - für mich verworfen.
Somit verstehe ich auch nicht wirklich, wieso bei dir nur su und exit vorhanden sein kann!?
Diese su-exit-Massaker ergibt sich bei mir immer, wenn ich update und dazwischen nichts im Terminal gemacht habe, wenn ich also einige Tage hintereinander zB. ausschließlich upgedatet habe. Das Update selber (apt update....) wird ja nicht in die ~/.bash_history geschrieben, weil root.

Hm, ich dachte, mit "ignoreboth" +/ "erasedups" erreiche ich, dass immer nur NEUE (=noch nie abgesetzte) Befehle in die .bash_history geschrieben werden, ganz sitzungsunabhängig, das wäre ja sehr sehr praktisch. Da habe ich mich wohl getäuscht.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: .bash_history

Beitrag von tobo » 20.03.2021 13:03:41

Du könntest natürlich z.B. sowas (periodisch) ausführen und damit die ~/.bash_history überschreiben:

Code: Alles auswählen

sort ~/.bash_history | uniq -c | sort -n | sed 's/^ *[0-9]* //'
Damit hättest du keinen doppelten Eintrag und vervollständigungstechnisch günstig, den häufigsten Eintrag zuletzt. Andere Methode wäre der Einsatz von externen Tools. Ich benutze manchmal rlwrap, um eine ebnutzerfreundliche Dash-Umgebung (sh-Shell) zu schaffen. Beim Aufruf von z.B.

Code: Alles auswählen

rlwrap -cm -D 2 -H ~/.sh_history sh -
könnte man das von dir gewünschte History-Verhalten simulieren.

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: .bash_history

Beitrag von dasebastian » 20.03.2021 13:34:45

tobo hat geschrieben: ↑ zum Beitrag ↑
20.03.2021 13:03:41
Du könntest natürlich z.B. sowas (periodisch) ausführen und damit die ~/.bash_history überschreiben:

Code: Alles auswählen

sort ~/.bash_history | uniq -c | sort -n | sed 's/^ *[0-9]* //'
Huuh, danke! Damit werde ich mich auseinandersetzen! Da gäbe es ja genug Möglichkeiten, das quasi automatisch durchlaufen zu lassen. Ich werde jetzt zuerst mal meine History gehörig zumüllen und mir dann das Ergebnis anschauen.

Mit HISTIGNORE beginne ich mich auch gerade anzufreunden.

:THX: :THX:

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: .bash_history

Beitrag von dasebastian » 21.03.2021 09:18:04

Ich habe mir jetzt nochmal das von dir erwähnte HISTIGNORE näher zu Gemüte geführt:

Code: Alles auswählen

# Historydefinitionen
HISTCONTROL=ignoreboth:erasedups
shopt -s histappend
HISTSIZE=500
HISTFILESIZE=500
export HISTTIMEFORMAT="%F %H:%M "
export HISTIGNORE="cd:exit:clear:history:ls:ll:su -:x:c:"
(x und c sind Aliases für exit und clear)

So funktioniert das jetzt erst mal ganz gut bei mir, das fand ich weniger umständlich.

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: [aufgewärmt] .bash_history

Beitrag von dasebastian » 29.12.2021 10:47:54

Ich muss hier nochmal nachsetzen. Bewirken die unterschiedlichen Schreibweisen, die ich bei Internetsuche so gefunden habe, unterschiedliche Resultate?

Code: Alles auswählen

export HISTCONTROL=ignoreboth:erasedups
# versus
HISTCONTROL=ignoreboth:erasedups
# versus
HISTCONTROL="ignoreboth:erasedups"
Ich frage nach, da die history bei mir noch immer (wieder) nicht so recht nachvollziehbar geschrieben wird und ich nirgends ein ausdrückliches "so ist es richtig" gefunden habe.

KP97
Beiträge: 3403
Registriert: 01.02.2013 15:07:36

Re: [aufgewärmt] .bash_history

Beitrag von KP97 » 29.12.2021 16:28:01

Ich habe in meiner .bashrc diesen Eintrag:
unset HISTFILE
Zusätzlich kannst Du noch das Paket Debianbash-completion entfernen, dann gibt es garantiert keine Einträge.

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: [aufgewärmt] .bash_history

Beitrag von dasebastian » 29.12.2021 17:03:15

Neinnein, ich verwende die history schon, sie funktioniert im Großen und ..hust... Ganzen auch.

Ich frage mich nur, welche Schreibweise jetzt wirklich richtig ist bzw. ob es egal ist, für welche man sich entscheidet. Da sieht jede .bashrc anders aus. Mal mit mal ohne export, mal mit mal ohne Anführungszeichen...

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: [aufgewärmt] .bash_history

Beitrag von JTH » 29.12.2021 17:15:37

dasebastian hat geschrieben: ↑ zum Beitrag ↑
29.12.2021 17:03:15
Ich frage mich nur, welche Schreibweise jetzt wirklich richtig ist bzw. ob es egal ist, für welche man sich entscheidet.
Alle drei sind „richtig“ und funktionieren. Das export am Anfang braucht es für die rein die Bash betreffenden Variablen in der .bashrc allerdings nicht.

Wenn du noch ein vierte Variante haben möchtest: ;)

Code: Alles auswählen

HISTCONTROL='ignoreboth:erasedups'
Die Anführungszeichen " oder ' sind hier allerdings nicht zwingend notwendig, da der Wert hinter dem = keine für die Bash speziellen Buchstaben enthält.
Manchmal bekannt als Just (another) Terminal Hacker.

dasebastian
Beiträge: 1846
Registriert: 12.07.2020 11:21:17
Lizenz eigener Beiträge: MIT Lizenz

Re: [aufgewärmt] .bash_history

Beitrag von dasebastian » 29.12.2021 17:27:00

JTH hat geschrieben: ↑ zum Beitrag ↑
29.12.2021 17:15:37
Alle drei sind „richtig“ und funktionieren. Das export am Anfang braucht es für die rein die Bash betreffenden Variablen in der .bashrc allerdings nicht.
(...) Wenn du noch ein vierte Variante haben möchtest: ;)
Super, danke dir, dann kürze ich das zusammen auf HISTCONTROL=.... :THX:

Antworten