Holen Sie sich den Bash-Verlauf, um sich nur die Befehle zu merken, denen das Leerzeichen vorangestellt ist!


10

Die Befehle, die in dem Terminal ausgeführt werden, dem Leerzeichen vorangestellt sind, werden nicht in der Befehlsverlaufsdatei aufgezeichnet. Aber gibt es eine Möglichkeit, das Gegenteil zu erreichen, dh der Verlauf sollte nur diejenigen aufzeichnen, denen Leerzeichen vorangestellt sind?

Antworten:


12

Sie können die Ubuntu-Standardeinstellungen umkehren, indem Sie zwei Variablen festlegen (HISTIGNORE und HISTCONTROL). Verwenden Sie dazu die folgenden Befehle:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupsÄndert das Verlaufsverhalten so, dass nur doppelte Zeilen ignoriert werden und Zeilen, die mit einem Leerzeichen beginnen, nicht ignoriert werden. (Sie können HISTCONTROL auch auf die leere Zeichenfolge (mit HISTCONTROL=) setzen, wenn Sie Duplikate behalten möchten, dies ist jedoch normalerweise nicht erwünscht.)

HISTIGNORE='!( *)'Lässt die Geschichte jede Zeile ignorieren, die nicht mit einem Leerzeichen beginnt: ( *)würde mit jeder Zeile übereinstimmen, die mit einem Leerzeichen beginnt, aber die führende Zeile !negiert die Übereinstimmung, sodass sie mit allem übereinstimmt, was nicht mit einem Leerzeichen beginnt. Und alles, was mit dem HISTIGNORE-Muster übereinstimmt, wird von der Geschichte ignoriert. (Diese letztere Option erfordert, dass bash mit aktiviertem extglob, mit ausgeführt wird shopt -s extglob, aber dies ist die Standardeinstellung unter Ubuntu.)

Wenn Sie dies dauerhaft machen möchten, vergessen Sie nicht, die beiden oben genannten Befehle in Ihre zu schreiben ~/.bashrc.


danke, genau das wollte ich .. speicherte die Änderungen an .bashrc.. ich brauchte das, um zu verhindern, dass bash alle cds, lss und andere alltägliche Befehle aufzeichnet , die ich benutze; und für die wenigen Befehle, die ich in der Geschichte brauche, kann ich jetzt das Präfix verwenden ..
genau

1
@rusty Wenn Sie nur einige triviale Befehle ausschließen möchten, ist es möglicherweise besser, wenn Sie so etwas verwenden HISTIGNORE='ls*:cd*', dass der Verlauf jede Zeile ignoriert, die mit beginnt, lsoder cdSie können diese Liste mit anderen Befehlen erweitern, indem Sie einfach einen :zwischen die Befehle setzen . Vergessen Sie jedoch nicht, dass die Befehlsrückruffunktion, auf die Sie mit der Aufwärtspfeiltaste zugreifen können, auch diesen Verlauf verwendet. Wenn Sie also festlegen, dass etwas ignoriert werden soll, können Sie diese ignorierten Befehle nicht mit dem Befehl "Aufrufen" aufrufen. Aufwärtspfeil".
Falkner

Ich wollte jeden SSH-Befehl ignorieren, aber keine Befehle wie ssh-copy-idoder ssh-keygen. In habe HISTIGNOREich " ssh\ *" in meine anderen ignorierten Befehle aufgenommen. Das Entkommen des Leerzeichens scheint obligatorisch zu sein.
user38537

2

" Die Befehle, die in dem Terminal ausgeführt werden, dem Leerzeichen vorangestellt sind, werden nicht in der Befehlsverlaufsdatei aufgezeichnet. "

Ja, sind Sie.

Terminalverlauf


1
es ist eine Einstellung in Bash ;-)
Rinzwind

Befehl mit vorangestellten Leerzeichen. Wie `sudo apt-get update`
Avinash Raj

Was ist der Wert Ihrer HISTCONTROL-Variablen?
Glenn Jackman

@AvinashRaj: Ja, sehen Sie mich Befehl "Dies sollte nicht aufgezeichnet werden", ich setze ein Leerzeichen (sichtbar sowohl in der Befehlszeile als auch im Verlauf). So funktioniert es also nicht. Vielleicht können Sie es konfigurieren (mit HISTCONTROL); Dies ist jedoch standardmäßig nicht der Fall.
MrVaykadji
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.