Bestimmte Befehle vom Shell-Verlauf fernhalten

Bestimmte Befehle vom Shell-Verlauf fernhalten

Ich habe einen Befehl, der den Bildschirm tatsächlich löscht, anstatt einfach zu scrollen, wie der Standardbefehl clear, der cin meinem als Alias ​​verwendet wird .zshrc:

alias c='clear && printf "\e[3J";'

Meine Frage ist: Wie kann ich diesen Befehl aus meinem Zsh-Befehlsverlauf fernhalten, sodass ich ihn nicht sehe, wenn ich mit der Pfeiltaste nach oben scrolle?

Antwort1

Mit set -o histignorespacewerden Befehlszeilen, die mit einem SPC-Zeichen beginnen, nicht in den Verlauf eingefügt (Sie können jedoch immer den unmittelbar zuvor eingegebenen Befehl abrufen).

Wenn Sie es also schaffen:

set -o histignorespace
alias c=' printf "\e[H\e[3J"'

Und geben Sie eine Befehlszeile ein, deren erster Befehl lautet c, dann wird diese Befehlszeile nicht zum Verlauf hinzugefügt.

Ein anderer Ansatz könnte darin bestehen, das accept-lineWidget neu zu definieren, sodass es den Bildschirm und den Bearbeitungspuffer bereinigt, wenn es nur Folgendes enthält c:

accept-line() case $BUFFER in
  (c) printf '\e[H\e[3J'; BUFFER=; zle redisplay;;
  (*) zle .accept-line
esac
zle -N accept-line

Beachten Sie, dass es nur funktioniert, wenn Sie „ cand that's all“ eingeben, nicht c; something-elsebeispielsweise. Es funktioniert auch, wenn Sie Enterbei der PS2-Eingabeaufforderung drücken, wie in:

for i do
c

Antwort2

In Bash existiert ein HISTIGNORE='c' doesn't store a command line of a singlec to the memory list of commands. The similarly namedHISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. AHIST_NO_STORE` auch in Zsh, scheint aber mit Aliasen fehlzuschlagen.

Es scheint also keine Lösung zu geben, um einen Alias c​​in der Historie zu vermeiden.

Was Sie jedoch tun, nämlich das aktuelle Fenster löschen ( clear) und das Scrollback ( printf "\e[3J") entfernen, könnte auch mit einer anderen ANSI-Steuersequenz erfolgen:

ESC c               # Full Reset (RIS), VT100.

Also, ein

printf '\ec'

sollte genug sein.

Das Definieren einer Tastenkombination hierfür sollte einfach sein und vermeidet das Speichern von Befehlen im Verlauf.

Antwort3

Method1:

    Just Put one blank space before entering any command it wont be recorded in history

Method2:

    set +o history (After this No command will be recorded  in history)

    set -o history(After this again command will be recorded in history)

verwandte Informationen