GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie schließe ich Befehle aus der Verlaufsliste aus, behalte sie aber im „Live“-Verlauf?

Dank eurer tollen Tipps rund um die HISTIGNORE habe ich es mittlerweile geschafft, meine Historie viel sauberer zu halten Option in .bashrc , wobei all diese sinnlosen ll weggelassen werden oder df -k Zeilen.

Allerdings habe ich auch gelernt, dass die HISTIGNORE Option ist sehr restriktiv , also.
Zum Beispiel, wenn Sie eine Zeile wie diese haben (vereinfacht)

HISTIGNORE='ll*:la*:cd*'

Sie werden diese nicht nur aus der Liste streichen , sondern auch aus Ihrem "Live-Verlauf" Da ich den flüchtigen Verlauf überspielen möchte, können Sie über Cursor nach oben darauf zugreifen /Cursor nach unten . Probieren Sie es aus:Sie werden jetzt vollständig weggelassen, egal wie lange Sie mit den Cursortasten durch Ihre Befehlshistorie blättern.

Aber manchmal tue ich es benötige diese Zeilen, besonders bei sehr langen und komplizierten Pfaden, die ich nicht erneut eingeben möchte. Andererseits möchte ich diese Linien exklusiv haben zu meinem Live-Verlauf hinzufügen und nicht in der Verlaufsliste speichern lassen da sie sich häufig ändern.

Gibt es eine Möglichkeit, dies zu erreichen?

Als weitere Randbemerkung habe ich herausgefunden, dass aus irgendeinem Grund der „Live“-Verlauf und die Verlaufsliste manchmal unterscheiden viel (vgl. Warum erhalte ich unterschiedliche Ergebnisse mit demselben Benutzer und dem History-Befehl).

Akzeptierte Antwort:

Sie können HISTIGNORE verwenden Umgebungsvariable.

Eine durch Doppelpunkte getrennte Liste von Mustern, die verwendet werden, um zu entscheiden, welche Befehlszeilen in der Verlaufsliste gespeichert werden sollen. Zum Beispiel:

export HISTIGNORE="cd*:ls*"

dies wird alle cd- und ls-Befehle aus dem Verlauf ignorieren.

BEARBEITEN:

Entschuldigung, bei meinem ersten Lesen habe ich mich nicht ausreichend um Ihre Frage gekümmert. Übrigens hast du recht:HISTIGNORE ist eine sehr harte Einstellung, und bash_history ignoriert einfach jeden Befehl, der in dieser Variablen aufgeführt ist (es wird ihn in dem Moment ignorieren, in dem Sie ihn ausführen, wenn es bereits Einträge mit diesem Befehl in Ihrer HISTFILE gibt Sie werden von der umgekehrten Verlaufssuche gefunden.

Um zunächst Ihre letzte Frage zu beantworten:Live- und geschriebene Geschichte können sehr unterschiedlich sein, wenn Sie verschiedene Terminals gleichzeitig verwenden. Sie könnten eine Lösung versuchen, wie hier beschrieben:

Bewahren Sie den Bash-Verlauf in mehreren Terminalfenstern auf

Was Sie sich vorstellen können, ist eine Lösung, bei der Sie eine Funktion in Ihrem ~/.bash_logout verwenden Datei, wodurch die nicht gewünschten Verlaufseinträge gelöscht werden.

so etwas sollte tun, was Sie wollen:

 function clear_history(){
    # hist_ignore regex, this may be done in a more fancy way, 
    # such as using an env variable, but anyway
    MYHISTIGNORE='^cd:^view:^cat'

    # write down history to file
    history -w

    # create a new tmp file for history
    tmpFile=$(mktemp)
    cp ${HISTFILE}  ${tmpFile}

    # use it to filter history
    for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do 
       sed -i "/${myRegex}/d" ${tmpFile}
    done

    # and copy it back to history file
    mv ${tmpFile} ${HISTFILE}
}

Linux
  1. So verwenden Sie den Verlaufsbefehl unter Linux

  2. So löschen Sie den Bash-Verlauf unter Linux

  3. So löschen Sie einen bestimmten Befehl aus dem Bash-Verlauf in Linux

  4. Eine Liste von Verzeichnissen vom Unix-Suchbefehl ausschließen?

  5. So schließen Sie ein Verzeichnis in find aus. Befehl

So verwenden Sie den Linux-Verlaufsbefehl

So verwenden Sie den Linux-SS-Befehl

So zeigen Sie wichtige Ereignisse in der Weltgeschichte von der Befehlszeile aus an

So entfernen Sie einen Befehl aus dem Verlauf in Linux

So listen Sie Festplatten unter Linux auf

So listen Sie nur Verzeichnisse in Linux auf