History Grundsätzliche Frage (gelöst)

Message
Author
User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

History Grundsätzliche Frage (gelöst)

#1 Post by finnegan »

Hallo,

verstehe nicht ganz, wo festgelegt ist, wie die history konfiguriert ist. Wollte eigentlich nur die Anzahl der History-Einträge ändern. In meinem Bash-Buch steht, die Einträge wären auf default 500 gesetzt. Aber in meiner bashrc steht garnichts über 500 Einträge:

Code: Select all

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${devuan_chroot:+($devuan_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

Die bash_completion.sh enthält auch nix:

Code: Select all

# Check for interactive bash and that we haven't already been sourced.
if [ -n "$BASH_VERSION" -a -n "$PS1" -a -z "$BASH_COMPLETION_COMPAT_DIR" ]; then

# Check for recent enough version of bash.
bash=${BASH_VERSION%.*}; bmajor=${bash%.*}; bminor=${bash#*.}
if [ $bmajor -gt 4 ] || [ $bmajor -eq 4 -a $bminor -ge 1 ]; then
    [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
        . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
    if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
        # Source completion code.
        . /usr/share/bash-completion/bash_completion
    fi
fi
unset bash bmajor bminor

fi
/usr/share/bash-completion
dito
Hat jemand einen Tip?
Last edited by finnegan on 04. Dec 2019 13:36, edited 1 time in total.
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

msi
Posts: 47
Joined: 04. Jan 2019 17:35

Re: History Grundsätzliche Frage

#2 Post by msi »

finnegan wrote:
23. Nov 2019 23:47
In meinem Bash-Buch steht, die Einträge wären auf default 500 gesetzt. Aber in meiner bashrc steht garnichts über 500 Einträge...
Das liegt daran, dass 500 der Standardwert ist und daher nicht explizit angegeben werden muss. Ruf mal die Handbuchseite zu Bash auf und suche dort nach HISTSIZE. Da ist es erklärt.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#3 Post by finnegan »

Danke für denTip!
Der Zusammenhang ist mir aber nicht klar. Sorry, an der bash habe ich schon lange nicht mehr rumgeschraubt.

Wie verändere ich konkret die Anzahl der Einträge?
Ich hätte auch gerne Duplikate ignoriert ==> ignoredups
Wie geht's?

In meiner .bashrc ist alles auskommentiert:
~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${devuan_chroot:+($devuan_chroot)}\h:\w\$ '
# PS1='\[\e[01;31m\]\h\[\e[00m\]:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'
Soll da der Eintrag "

Code: Select all

  HISTSIZE=200 
reingeschrieben werden?
Woher weiss die bash die "Standardeinstellungen"? Wo sind die denn eingetragen?

Danke für Eure Tips.
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#4 Post by finnegan »

Na gut, unter Umgebungsvariablen habe ich etwas gefunden.
Parameter ändern geht offensichtlich mit

Code: Select all

 export HISTSIZE=200
Ergebnis:

Code: Select all

echo $HISTSIZE
200
Zurück zu meiner Frage: wo wird das hingeschrieben?
In der .bashrc nicht. Auch nicht in bash_completion.sh, ~/.profile oder /usr/share/bash-completion.

Wie kriegt man raus wohin das geschrieben wird?
Zweites Problem:

ignoredups
und
erasedups

Code: Select all

export HISTCONTROL=ignoredups
und

Code: Select all

 export HISTCONTROL=erasedups
ändern nichts an den History-Einträgen, weder den alten noch an neuen.

Blickt da jemand durch?
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

msi
Posts: 47
Joined: 04. Jan 2019 17:35

Re: History Grundsätzliche Frage

#5 Post by msi »

Ich versuche mich mal an ein bisschen Komplexitätsreduktion.

Dass man beim Konfigurieren von Bash zunächst kaum durchsieht, ist im Übrigen keine Schande. Ich habe da auch noch nicht den vollen Durchblick. Allerdings liegt das Problem, meiner Erfahrung nach, hauptsächlich darin, wie kompliziert es die Herausgeber der jeweiligen Linux-Distribution einem machen. Unter Debian (oder Devuan) ist das grundsätzlich ein Albtraum. Wenn du magst, kannst du dir im Vergleich dazu mal Void Linux ansehen. Das ist erstaunlich aufgeräumt. Abgesehen davon bringt aber auch der Umstand, dass es so einige verschiedene und nicht immer ganz kompatible Bourne-ähnliche Shells gibt, ein paar grundsätzliche Schwierigkeiten mit sich.

Zur Sache:

1. Bash completion, also die Autovervollständigung der Shell, hat mit dem, was du machen willst, nichts zu tun.

2. Die Einstellungen zur „Historie eingegebener Kommandos“ sollte man einfach in ~/.bashrc setzen, und zwar etwa so:

Code: Select all

HISTSIZE=<Wert>
HISTFILESIZE=<Wert>
HISTCONTROL=<Wert(e)>
3. HISTCONTROL ist in der Handbuchseite zu Bash recht gut erklärt. Suche einfach mal danach (mit /HISTCONTROL). Es ist gleich der erste Treffer.

4. Standardwerte
finnegan wrote: Woher weiss die bash die "Standardeinstellungen"? Wo sind die denn eingetragen?
Ich vermute, die stehen einfach im Quelltext.

msi
Posts: 47
Joined: 04. Jan 2019 17:35

Re: History Grundsätzliche Frage

#6 Post by msi »

Noch eine grundsätzliche Bemerkung: Die drei Dateien, die für eine nutzerspezifische Konfiguration von Bash relevant sind, heißen (in einem vernünftigen Setup) ~/.bash_profile, ~/.bashrc und ~/.bash_logout. In die letztere Datei würde ich lediglich den Befehl clear eintragen, damit man nach dem Abmelden den Ausgabepuffer nicht zurückrollen kann. ~/.bash_profile ist die Datei, die ein Mal beim Anmelden gelesen wird (oder wenn man Bash manuell als Login-Shell startet). ~/.bashrc wird für jede interaktive Shellinstanz neu eingelesen, also bspw. für jedes Terminalfenster, das unter X gestartet wird.

Unter Debian wird, meines Wissens, allerdings immer noch standardmäßig ~/.profile statt ~/.bash_profile verwendet.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#7 Post by finnegan »

Danke, das erklärt so einiges.
Benutze übrigens devuan
;-)

Ausserdem habe ich nicht gemerkrt, dass man offensichtlich alle Terminalfenster schließen muss, damit sich die bash neu einliest.

:-(

inzwischen habe ich die history etwas besser im Griff.

Eingetragen habe ich in der .bashrc jetzt beide Werte:
HISTCONTROL=ignoreboth
HISTCONTROL=erasedups

Mit echo $HISTCONTROL
erhalte ich aber nur
"erasedups"
Wie kommt das?
LG
finnegan
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

msi
Posts: 47
Joined: 04. Jan 2019 17:35

Re: History Grundsätzliche Frage

#8 Post by msi »

finnegan wrote:
02. Dec 2019 18:27
Danke, das erklärt so einiges.
Benutze übrigens devuan
Ja, das hatte ich schon aus deiner ~/.bashrc rausgelesen. Mein Hauptrechner läuft momentan auch noch damit. Das wird sich aber hoffentlich bald ändern.
finnegan wrote:
02. Dec 2019 18:27
Ausserdem habe ich nicht gemerkrt, dass man offensichtlich alle Terminalfenster schließen muss, damit sich die bash neu einliest.
Du kannst auch einfach in einer laufenden Shellinstanz die Initialisierungsdatei sourcen, d. h., sie von der laufenden Shell einlesen und ausführen lassen. Das geht entweder mit source ~/.bashrc oder . ~/.bashrc. Beide Befehle machen genau das Gleiche, wobei allerdings nur die zweite Variante im POSIX-Standard spezifiziert ist, was dich aber, wenn du ohnehin nur Bash nutzt, nicht weiter interessieren muss.
finnegan wrote:
02. Dec 2019 18:27
Eingetragen habe ich in der .bashrc jetzt beide Werte:
HISTCONTROL=ignoreboth
HISTCONTROL=erasedups

Mit echo $HISTCONTROL
erhalte ich aber nur
"erasedups"
Wie kommt das?
Die Antwort steht in der Handbuchseite:

Code: Select all

       HISTCONTROL
              A colon-separated list of values controlling  how  commands  are
              saved  on  the  history  list.
Das heißt, wenn du mehrere Werte angeben willst, musst du die einfach per Doppelpunkt getrennt angeben. Deine jetzige Konfiguration führt einfach dazu, dass die Variable zuerst auf ignoredups gesetzt, dann aber überschrieben und dabei auf erasedups gesetzt wird. Das ist etwa so, als würdest du bspw. eine Variable x erst auf den Wert 1 setzen und danach auf den Wert 0 setzen und erwarten, dass x am Ende den Wert 10 hat.

msi
Posts: 47
Joined: 04. Jan 2019 17:35

Re: History Grundsätzliche Frage

#9 Post by msi »

Da ich mich selbst gerade damit beschäftige, Bash unter Void Linux zu konfigurieren, sind mir im Nachhinein noch zwei Dinge aufgefallen.

1. HISTCONTROL auf ignoredups und erasedups zu setzen, hat keinen Sinn, denn erasedups löscht alle identischen Eingabezeilen.
2. HISTFILESIZE muss man eigentlich nicht eigens setzen, da es standardmäßig auf den Wert von HISTSIZE gesetzt wird.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#10 Post by finnegan »

Danke, habe "erasedups" entfernt. Nebenbei, "erasedups" entfernt nur doppelte Einträge, wenn sie aufeinanderfolgen.
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#11 Post by finnegan »

Übrigens: mein Plan war, die history möglichst klein zu halten, Duplikate zu entfernen und über einen Cron-job jeweils alle paar Tage eine Datei anzulegen, um später mal ältere Einträge wieder rauszusuchen.

Da bräuchte ich auch Unterstützung, weil ich kaum Programmiererfahrung habe.
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

msi
Posts: 47
Joined: 04. Jan 2019 17:35

Re: History Grundsätzliche Frage

#12 Post by msi »

finnegan wrote:
03. Dec 2019 13:58
Nebenbei, "erasedups" entfernt nur doppelte Einträge, wenn sie aufeinanderfolgen.
Da sagt die man page aber was anderes:

Code: Select all

A value of erasedups causes all previous lines matching the current line
to be removed from the history list before that line is saved.
Ich hab mal die Probe aufs Exempel gemacht:

Code: Select all

$ rm ~/.bash_history
$ history -c
$ echo "BSD" >/dev/null
$ echo "Linux" >/dev/null
$ echo "Solaris" >/dev/null
$ echo "BSD" >/dev/null
Die erste Zeile löscht die Datei, in der das Protokoll eingegebener Kommandos beim Beenden der Shell abgelegt wird. Die zweite Zeile löscht das Befehlsprotokoll der aktuellen Shellinstanz. Dann folgen vier Befehle, von denen der letzte mit dem ersten identisch ist. Wenn ich Bash danach beende und eine neue Bash-Instanz starte, sieht ~/.bash_history so aus:

Code: Select all

echo "Linux" >/dev/null
echo "Solaris" >/dev/null
echo "BSD" >/dev/null
finnegan wrote:
03. Dec 2019 14:05
Übrigens: mein Plan war, die history möglichst klein zu halten, Duplikate zu entfernen und über einen Cron-job jeweils alle paar Tage eine Datei anzulegen, um später mal ältere Einträge wieder rauszusuchen.
Der Sinn dieses Vorhabens erschließt sich mir nicht ganz. Warum willst du das Protokoll eingegebener Befehle im laufenden Betrieb kleinhalten, dann aber eine extra Datei anlegen, um Einträge über längere Zeit zu sammeln? Wäre nicht das Gegenteil sinnvoller? Das heißt: Im laufenden Betrieb ein möglichst großes Befehlsprotokoll anlegen (auch in ~/.bash_history) und dann dafür sorgen, dass das bspw. (mehr oder weniger) aller zwei Tage gelöscht wird. Dazu bräuchte es übrigens nicht unbedingt einen cron job.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#13 Post by finnegan »

causes all previous lines matching the current line
das hatte ich als direkt vorhergehende Zeile interpretiert.
Außerdem war ich davon ausgegangen, dass auch ältere Einträge in der history von Doppeleinträgen "bereinigt" werden ... da habe ich mich dann gewundert, dass immer noch so viele Doppeleinträge da waren.

mit der neuen Einstellung:

Code: Select all

HISTCONTROL=ignoredups:erasedups
werden tatsächlich auch Eingaben von nicht aufeinanderfolgende Zeilen von Duplikaten befreit.
Also Problem gelöst

Die history möglichst klein zu halten, war ein Tip, den mir ein Bekannter gegeben hat. Würde angeblich die CPU entlasten.
Alte history-Einträge will ich deshalb aufheben, weil weniger oft gebrauchte Eingaben nach längerer Zeit doch mal wieder sinnvoll einzusetzen sind. Diese Datei kann ja ruhig größer sein, die wird ja auch nicht dauernd abgefragt.
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

User avatar
finnegan
Posts: 12
Joined: 23. Nov 2019 22:13

Re: History Grundsätzliche Frage

#14 Post by finnegan »

Wie setze ich jetzt den Thread auf "gelöst"?
Aufklärung ist der Ausgang des Menschen aus seiner selbst verschuldeten Unmündigkeit. Unmündigkeit ist das Unvermögen, sich seines Verstandes ohne Leitung eines anderen zu bedienen.

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: History Grundsätzliche Frage

#15 Post by hjb »

Hi,

du kannst den ersten Beitrag editieren und den Titel ändern. Notwendig ist das aber nicht.

Grüße,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

Post Reply