Éviter de garder le commandement dans l'histoire

33

J'utilise bash et je voudrais éviter que certaines commandes soient conservées dans l'historique.

  • Est-il possible de faire cela pour la prochaine commande seulement?
  • Est-il possible de faire cela pour toute la session?
Luc M
la source
Notez que si l'objectif est de masquer les mots de passe dans les arguments de ligne de commande, ils seront toujours visibles via ps
Benitok

Réponses:

36

et je viens de me rappeler une autre réponse, celle-ci est la réponse réelle à votre question.

si vous avez "ignorespace" dans HISTCONTROL, alors bash ne se souviendra pas de toute ligne commençant par un caractère d'espacement. il n'apparaîtra même pas dans l'historique du shell actuel, encore moins sera sauvegardé dans $ HISTFILE.

par exemple, j'ai exporté HISTCONTROL = 'ignoreboth: erasedups' dans mon ~ / .bashrc

voici les détails de la page de manuel bash:

HISTCONTROL
  Une liste de valeurs séparées par des deux-points contrôlant comment les commandes sont
  enregistré sur la liste de l'histoire. Si la liste de valeurs comprend
  ignorespace, les lignes commençant par un espace ne sont pas
  enregistré dans la liste de l'historique. Une valeur de ignoredups provoque des lignes
  correspondant à l'entrée précédente de l'historique pour ne pas être enregistré. Une valeur de
  ignoreboth est un raccourci pour ignorespace et ignoredups. Une valeur
  of erasedups provoque toutes les lignes précédentes correspondant à la ligne en cours
  être supprimé de la liste de l'historique avant que cette ligne ne soit enregistrée.
  Toute valeur ne figurant pas dans la liste ci-dessus est ignorée. Si HISTCONTROL est
  désélectionne ou n'inclut pas de valeur valide, toutes les lignes lues par le
  les analyseurs de shell sont enregistrés dans la liste de l'historique, sous réserve de la valeur
  d'HISTIGNORE. La deuxième ligne et les lignes suivantes d'une multiligne
  les commandes composées ne sont pas testées et sont ajoutées à l'historique
  quelle que soit la valeur de HISTCONTROL.
cas
la source
1
+1 pour l'astuce spatiale: D
petrus
19

Voici quelques leçons d'histoire que j'ai apprises en googlant:

Vous pouvez définir l'historique pour ignorer certaines chaînes. Dans cet exemple, j'ai ignoré les commandes ls, passwd et les commandes préfixées par l'espace de caractères.

export HISTIGNORE = "ls: passwd:"

Pour désactiver l'historique de votre session, vous pouvez émettre:

export HISTSIZE = 0

Référence

Michael Havas
la source
7

Si vous souhaitez simplement supprimer la dernière commande de l'historique, vous pouvez appuyer sur Up-arrow, suivi de Ctrl - U(effacer au début de la ligne), puis à Up-arrownouveau.

Vous pouvez effacer n'importe quelle ligne de l'histoire comme celle-ci. Utilisez simplement la flèche vers le haut, la recherche ou autre chose pour définir la ligne de commande en cours de modification, puis appuyez sur Ctrl - U, puis sur Up-arrowou Down-arrowpour passer à une autre ligne de l'historique.

J'ai découvert cela par accident, il y a un jour et demi. Je ne sais pas si c'est documenté ou non.

En général, cependant, il est moins fastidieux de ne pas sauvegarder l'historique du shell actuel avec:

HISTFILE=/dev/null
cas
la source
3

Vous pouvez désélectionner la HISTFILEvariable. De man bash:

  HISTFILE
         Le nom du fichier dans lequel l’historique des commandes est enregistré (voir HIS-
         TORY ci-dessous). La valeur par défaut est ~ / .bash_history. Si non défini,
         l'historique des commandes n'est pas enregistré lorsqu'un shell interactif
         sorties.

Je ne pense pas que cela empêche la commande d'apparaître dans l'historique du shell local avant sa sortie.

Greg Hewgill
la source
2

Je fais parfois

export HISTFILE=/dev/null
Rory
la source
1

Je vois que personne n'a écrit cette méthode, alors je le ferai.

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d supprime l'entrée mentionnée de l'historique.

HISTCMDstocke le numéro de commande de la commande à exécuter ensuite. Ainsi, (HISTCMD-1) fait référence à la dernière commande exécutée.

J'ai fait un court film sur Bash qui montre comment cela fonctionne: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2

Après avoir exécuté la commande et parce qu'elle supprime également la commande elle-même, le fait de monter avec la flèche n'affichera pas la commande. Par conséquent, si vous prévoyez de l'utiliser fréquemment, il serait préférable de créer un alias:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

Ensuite, vous pouvez faire:

$ hc command
Itai Ganot
la source