Comment empêcher une commande dans le zshell d'être enregistrée dans l'historique?

Réponses:

37

Utilisez l'option HIST_IGNORE_SPACE.

setopt HIST_IGNORE_SPACE

homme zshoptions

HIST_IGNORE_SPACE

Supprimez les lignes de commande de la liste d'historique lorsque le premier caractère de la ligne est un espace ou lorsque l'un des alias développés contient un espace de début. Notez que la commande persiste dans l'historique interne jusqu'à ce que la commande suivante soit entrée avant qu'elle ne disparaisse, vous permettant de réutiliser brièvement ou de modifier la ligne. Si vous souhaitez le faire disparaître immédiatement sans entrer une autre commande, tapez un espace et appuyez sur Entrée.

Darren Hall
la source
J'aimerais pouvoir le faire pour toutes les commandes tapées dans une fenêtre de terminal depuis l'ouverture sur OSX. Car quand vous réalisez que vous avez aboyé le mauvais arbre.
Dan Rosenstark
2
Et puis, pour les commandes que je voulais empêcher, j'ai utilisé des alias et préfixé un espace: alias jrnl = "jrnl"
Sagar Jauhari
2
@Yar kill -9 ce shell (s'il ne fait pas d'écriture de fichier d'historique ligne par ligne)
Michael Shigorin
1
@MichaelShigorin Merci! kill -9 $$est en effet fantastique pour éviter que toutes les commandes émises dans la session de terminal en cours soient stockées dans l'historique.
Jeffrey Lebowski
2
@CMCDragonkai Vous pouviez unset HISTFILEavant votre bloc de commandes. Vous auriez besoin de réinitialiser HISTFILEpar la suite ou d'ouvrir un nouveau shell pour conserver les commandes que vous souhaitez dans votre historique.
Chauncey Garrett
2

Si vous souhaitez un contrôle plus granulaire de ce qui est ajouté à l'historique ZSH, vous pouvez définir la zshaddhistoryfonction dans .zshrc. La définition suivante utilise une expression régulière pour définir un modèle à ignorer:

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

Notez que le comportement de man zshoptsdessous HIST_IGNORE_SPACEest toujours présent:

Notez que la commande persiste dans l'historique interne jusqu'à ce que la commande suivante soit entrée avant qu'elle ne disparaisse, vous permettant de réutiliser brièvement ou de modifier la ligne.

Donc, pour le tester, vous devriez en toucher un supplémentaire [Enter]. Cela supprime la commande à la fois de la sortie de historyet de l'historique des flèches ↑.

gogstad
la source