Comment exécuter une commande dans bash sans la sauvegarder dans l'historique ?
Réponses
Trop de publicités?Ajouter un espace avant la commande. Les commandes commençant par un espace ne sont pas enregistrées dans l'historique :
root@ubuntu-1010-server-01:~# echo foo
foo
root@ubuntu-1010-server-01:~# history
1 echo foo
2 history
root@ubuntu-1010-server-01:~# echo bar
bar
root@ubuntu-1010-server-01:~# history
1 echo foo
2 history
homme bash
HISTCONTROL A colon-separated list of values controlling how commands are saved on the history list. If the list of values includes ignorespace, lines which begin with a space character are not saved in the history list. A value of ignoredups causes lines matching the previous history entry to not be saved. A value of ignoreboth is shorthand for ignorespace and ignoredups. A value of erasedups causes all previous lines matching the cur rent line to be removed from the history list before that line is saved. Any value not in the above list is ignored. If HISTCONTROL is unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, subject to the value of HISTIGNORE. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTCONTROL.
Il convient également de mentionner l'astuce qui consiste à tuer la session de connexion en cours au lieu de quitter normalement (ce qui ne permet pas de sauvegarder l'historique). C'est particulièrement utile lorsque vous vous connectez à un ordinateur partagé, au lieu de vous rappeler de préfixer avec un espace, vous pouvez simplement mettre fin à la session en la tuant. La façon la plus simple de tuer une session est d'exécuter la commande suivante :
kill -9 0
Pid 0 fait toujours référence au PID du processus en cours, de sorte que vous envoyez en fait un signal de mise à mort à lui-même. J'utilise aussi souvent cette méthode au lieu de quitter normalement, car j'ai souvent des sessions bloquées lors d'une sortie normale, probablement à cause d'une mauvaise configuration.
La réponse acceptée fonctionne dans les versions non-Ubuntu de bash, mais d'après la page de manuel, l'option ignorespace
o ignoreboth
doit être définie dans le HISTCONTROL
variable d'environnement. Sous macOS, cette variable est vide par défaut et cette fonctionnalité ne fonctionne pas, mais après avoir exécuté la commande export HISTCONTROL=ignorespace
il ignore désormais les commandes précédées d'un espace, comme indiqué.