web-dev-qa-db-fra.com

Comment supprimer une entrée de l'historique dans ZSH

Disons que j'ai exécuté une commande en utilisant un zsh

echo "mysecret" > file

Je peux facilement imprimer l'historique, y compris les numéros d'entrée, à l'aide de la commande fc -l:

1  echo "mysecret" >| file

Mais comment supprimer facilement une entrée de l'historique?

Je ne trouve pas de paragraphe correspondant dans man zshbuiltins.

71
sandoz

* BSD/Darwin:

LC_ALL=C sed -i '' '/porn/d' $HISTFILE

Linux (GNU sed):

LC_ALL=C sed -i '/porn/d' $HISTFILE

Cela supprimera toutes les lignes correspondant à "porn" de votre $ HISTFILE.

Avec setopt HIST_IGNORE_SPACE, vous pouvez ajouter à la commande ci-dessus un caractère espace pour l'empêcher d'être écrite dans $ HISTFILE.

Comme Tim l'a souligné dans son commentaire ci-dessous , le préfixe LC_ALL = C empêche l'échec de la "séquence d'octets illégaux".

85
rxw

Je ne sais pas s'il existe une méthode élégante pour le faire, mais dans des situations similaires, je me suis déconnecté (permettant à zsh de vider son tampon et d'écrire mon historique dans un fichier), puis de me connecter et enfin édité manuellement~/.zsh_history, en supprimant la ligne "dangereux".

45
poplitea

Si vous utilisez l'option HIST_IGNORE_SPACE dans zsh, vous pouvez ajouter des commandes avec un espace "" et elles ne seront pas mémorisées dans le fichier d'historique. Si vous avez des commandes secrètes que vous utilisez couramment, vous pouvez faire quelque chose comme ceci:

http://unsyncopated.com/blog/index.php/2007/08/18/omitting-certain-commands-from-zshs-history/

24
Michael Barton