45 votes

Exécuter une commande dans bash sans l'enregistrer dans l'historique

Comment exécuter une commande dans bash sans la sauvegarder dans l'historique ?

70voto

ooshro Points 10764

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.

3voto

haridsv Points 131

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.

1voto

Perleone Points 135

Une autre solution consiste à définir le fichier historique dans un répertoire :

export HISTFILE=/

0voto

thomscode Points 1

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é.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X