Warum speichert bash keine Befehle, die mit Leerzeichen beginnen?

48

Wenn ich eine Folge von Befehlen durchführe wie:

$ ls
$ grep abc file.txt

und benutzen Sie dann die Aufwärtspfeiltaste, um die vorherige zu erhalten, das Terminal zeigt die letzte cmd (die grephier ist)

Aber wenn ich so etwas mache:

$ ls
$   grep abc file.txt

Wo grepLeerzeichen vorangestellt sind, gibt Drücken nach ls, nicht grep.

Warum ist das?

sandyp
quelle
Follow-up: Warum hat bash die Option HISTCONTROL = ignorespace?
Gilles 'SO- hör auf böse zu sein'

Antworten:

52
echo $HISTCONTROL
ignoreboth

Mann Bash:

HISTCONTROL

Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle in der Verlaufsliste gespeichert werden. Wenn die Liste der Werte enthält ignorespace, werden Zeilen, die mit einem Leerzeichen beginnen, nicht in der Verlaufsliste gespeichert. Ein Wert von ignoredupsbewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden. Ein Wert von ignorebothist eine Abkürzung für ignorespaceund ignoredups.

Hauke ​​Laging
quelle
3
und HISTCONTROList ignorebothin der Standardeinstellung ~/.bashrcvon debianmindestens festgelegt.
Stéphane Chazelas
1
Was ist der Anwendungsfall von ignorespace?
Ciro Santilli
1
In Ubuntu 14.04 ist die Standardeinstellung ignorebothärgerlich.
Nick Gammon
6
Ciro, ich nehme an, es ist so, dass Sie einen Befehl wie eingeben können echo "drop database mydb" | mysql -u root -pPasswordund ihn nicht im Verlauf gespeichert haben.
Jeremy
2
Für Mac-Benutzer ist HISTCONTROL auf nichts festgelegt, daher müssen Sie es zu Ihrem bash_profil oder ähnlichem hinzufügen
unix.stackexchange.com/questions/115917/…