Wie kann verhindert werden, dass ein Befehl in der zshell im Verlauf gespeichert wird?

26

In Bash weiß ich, dass das Setzen eines Leerzeichens vor einem Befehl verhindert, dass es in der Historie gespeichert wird. Was ist das Äquivalent für die zshell?

bneil
quelle
Querverbindung zu (etwas komplizierter
Michael Shigorin

Antworten:

37

Verwenden Sie die Option HIST_IGNORE_SPACE.

setopt HIST_IGNORE_SPACE

Mann zshoptions

HIST_IGNORE_SPACE

Entfernen Sie Befehlszeilen aus der Verlaufsliste, wenn das erste Zeichen in der Zeile ein Leerzeichen ist oder wenn einer der erweiterten Aliase ein führendes Leerzeichen enthält. Beachten Sie, dass der Befehl im internen Verlauf verweilt, bis der nächste Befehl eingegeben wird, bevor er verschwindet. Auf diese Weise können Sie die Zeile kurzzeitig wiederverwenden oder bearbeiten. Wenn Sie möchten, dass es sofort verschwindet, ohne einen anderen Befehl einzugeben, geben Sie ein Leerzeichen ein und drücken Sie die Eingabetaste.

Darren Hall
quelle
Ich wünschte, ich könnte dies für alle Befehle tun, die in einem Terminalfenster seit dem Öffnen unter OSX eingegeben wurden. Wenn Sie feststellen, dass Sie den falschen Baum angebellt haben.
Dan Rosenstark
2
Und dann habe ich für die Befehle, die ich verhindern wollte, Aliase verwendet und ein Leerzeichen vorangestellt: alias jrnl = "jrnl"
Sagar Jauhari
2
@Yar kill -9 diese Shell (wenn es nicht Zeile-für-Zeile-Verlaufsdatei schreibt)
Michael Shigorin
1
@MichaelShigorin Danke! kill -9 $$Es ist in der Tat fantastisch zu vermeiden, dass alle in der aktuellen Terminalsitzung ausgegebenen Befehle im Verlauf gespeichert werden.
Jeffrey Lebowski
2
@CMCDragonkai Du könntest unset HISTFILEvor deinem Befehlsblock stehen . Sie müssen danach zurücksetzen HISTFILEoder eine neue Shell öffnen, um die gewünschten Befehle in Ihrem Verlauf zu speichern.
Chauncey Garrett
2

Wenn Sie eine genauere Kontrolle darüber wünschen, was zur ZSH-Historie hinzugefügt wird, können Sie die zshaddhistoryFunktion in definieren .zshrc. Die folgende Definition verwendet einen regulären Ausdruck, um ein zu ignorierendes Muster zu definieren:

function zshaddhistory() {
  emulate -L zsh
  if ! [[ "$1" =~ "(^ |^ykchalresp|--password)" ]] ; then
      print -sr -- "${1%%$'\n'}"
      fc -p
  else
      return 1
  fi
}

Beachten Sie, dass das Verhalten von man zshoptsunter HIST_IGNORE_SPACEnoch vorhanden ist:

Beachten Sie, dass der Befehl im internen Verlauf verweilt, bis der nächste Befehl eingegeben wird, bevor er verschwindet. Auf diese Weise können Sie die Zeile kurzzeitig wiederverwenden oder bearbeiten.

Um es zu testen, müsste man ein Extra treffen [Enter]. Dadurch wird der Befehl sowohl aus der Ausgabe von historyals auch aus der ↑ Pfeilhistorie entfernt.

Gogstad
quelle