Jak zapobiec zapisywaniu polecenia w Zshell w historii?

Odpowiedzi:

37

Użyj opcji HIST_IGNORE_SPACE.

setopt HIST_IGNORE_SPACE

człowiek zshoptions

HIST_IGNORE_SPACE

Usuń wiersze poleceń z listy historii, gdy pierwszym znakiem w linii jest spacja lub gdy jeden z rozwiniętych aliasów zawiera spację wiodącą. Zauważ, że polecenie pozostaje w historii wewnętrznej, dopóki kolejne polecenie nie zostanie wprowadzone, zanim zniknie, co pozwala na krótkie ponowne użycie lub edycję wiersza. Jeśli chcesz, aby zniknął od razu bez wprowadzania innego polecenia, wpisz spację i naciśnij klawisz Return.

Darren Hall
źródło
Chciałbym móc to zrobić dla wszystkich poleceń-wpisanych-w-terminalu-okno-od-otwarcia w OSX. Gdy zdasz sobie sprawę, że szczekasz na złe drzewo.
Dan Rosenstark,
2
A potem, dla poleceń, którym chciałem zapobiec, użyłem aliasów i poprzedziłem spacją: alias jrnl = "jrnl"
Sagar Jauhari
2
@ Yar zabij -9 tej powłoki (jeśli nie wykonuje zapisów pliku historii po linii)
Michael Shigorin
1
@MichaelShigorin Thanks! kill -9 $$jest naprawdę fantastyczne, aby uniknąć zapisywania wszystkich poleceń wydanych podczas bieżącej sesji terminala w historii.
Jeffrey Lebowski
2
@CMCDragonkai Możesz unset HISTFILEprzed blokiem poleceń. Trzeba będzie HISTFILEpóźniej zresetować lub otworzyć nową powłokę, aby zachować polecenia w historii, które chcesz.
Chauncey Garrett
2

Jeśli chcesz bardziej szczegółową kontrolę nad tym, co zostało dodane do historii ZSH, możesz zdefiniować zshaddhistoryfunkcję w .zshrc. Poniższa definicja używa wyrażenia regularnego do zdefiniowania wzorca do zignorowania:

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

Pamiętaj, że zachowanie od man zshoptsdołu HIST_IGNORE_SPACEnadal występuje:

Zauważ, że polecenie pozostaje w historii wewnętrznej, dopóki kolejne polecenie nie zostanie wprowadzone, zanim zniknie, co pozwala na krótkie ponowne użycie lub edycję wiersza.

Aby to przetestować, musiałbyś trafić dodatkowo [Enter]. Usuwa to polecenie zarówno z danych wyjściowych history, jak i historii strzałek ↑.

Gogstad
źródło