Como impedir que um comando no zshell seja salvo no histórico?

Respostas:

37

Use a opção HIST_IGNORE_SPACE.

setopt HIST_IGNORE_SPACE

homem zshoptions

HIST_IGNORE_SPACE

Remova as linhas de comando da lista do histórico quando o primeiro caractere da linha for um espaço ou quando um dos aliases expandidos contiver um espaço à esquerda. Observe que o comando permanece no histórico interno até que o próximo comando seja inserido antes de desaparecer, permitindo reutilizar ou editar brevemente a linha. Se você deseja que ele desapareça imediatamente sem inserir outro comando, digite um espaço e pressione Enter.

Darren Hall
fonte
Eu gostaria de poder fazer isso para todos os comandos digitados em uma janela de terminal desde que abertos no OSX. Pois quando você perceber que está latindo na árvore errada.
Dan Rosenstark
2
E, em seguida, para os comandos que eu queria evitar, eu usei aliases e prefixado um espaço: apelido JRNL = "JRNL"
Sagar Jauhari
2
Matar @Yar -9 que shell (se ele não faz gravações de arquivo histórico da linha-por-linha)
Michael Shigorin
1
@MichaelShigorin Thanks! kill -9 $$é realmente fantástico evitar que todos os comandos emitidos na sessão atual do terminal sejam armazenados no histórico.
Jeffrey Lebowski
2
@CMCDragonkai Você poderia unset HISTFILEantes do seu bloco de comandos. Você precisaria redefinir HISTFILEposteriormente ou abrir um novo shell para manter os comandos em seu histórico que você deseja.
Chauncey Garrett
2

Se você deseja um controle mais granular sobre o que está agregado à história ZSH, você pode definir a zshaddhistoryfunção .zshrc. A seguinte definição usa um regex para definir um padrão a ser ignorado:

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

Observe que o comportamento de man zshoptsbaixo HIST_IGNORE_SPACEainda está presente:

Observe que o comando permanece no histórico interno até que o próximo comando seja inserido antes de desaparecer, permitindo reutilizar ou editar brevemente a linha.

Então, para testá-lo, você teria que obter um extra [Enter]. Isso remove o comando da saída de historye também do histórico da seta ↑.

Gogstad
fonte