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?
J'utilise bash et je voudrais éviter que certaines commandes soient conservées dans l'historique.
Réponses:
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.
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
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
Vous pouvez désélectionner la HISTFILE
variable. 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.
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.
HISTCMD
stocke 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