web-dev-qa-db-fra.com

Exécuter une commande sans la conserver dans l'historique

Je veux exécuter certaines commandes mais je ne veux pas les stocker dans l'historique des commandes. Pour que personne ne puisse le rechercher dans le fichier .bash_history.

Existe-t-il un moyen d'exécuter les commandes bash de cette façon?

181
Jan Vorcak

Commencez votre commande avec un espace et il ne sera pas inclus dans l'historique.

Sachez que cela nécessite la variable d'environnement $HISTCONTROL pour être définie.

  • Vérifiez que la commande suivante renvoie ignorespace ou ignoreboth

    #> echo $HISTCONTROL
    
  • Pour ajouter la variable d'environnement s'il manque, la ligne suivante peut être ajoutée au profil bash. Par exemple. %HOME/.bashrc

    export HISTCONTROL=ignorespace
    

Après avoir redistribué le profil, les commandes avec préfixe d’espace ne seront pas écrites dans $HISTFILE

264
u-punkt

Dans une session bash donnée, définissez le fichier d'historique sur/dev/null en tapant:

export HISTFILE =/dev/null

Notez que, comme indiqué dans les commentaires, cela n’écrira aucune commande de cette session dans l’historique!

Juste ne plaisante pas avec le dur travail de votre administrateur système, s'il vous plaît;)

[UPDATE] La solution de @ Doodad est plus élégante. Désactivez simplement la variable: unset HISTFILE (merci!)

50
Miquel
echo "discreet";history -d $(history 1)
31
John Doe

Une extension de la réponse de @John Doe & @ user3270492. Mais cela semble fonctionner pour moi.

<your_secret_command>; history -d $((HISTCMD-1))

Vous ne devriez pas voir l'entrée de la commande dans votre historique.

Voici l'explication ..

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

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

https://superuser.com/a/52919

15
Rangaraj KS

Vous pourriez envisager d’utiliser un shell sans historique, comme peut-être

/bin/sh << END
   your commands without history
END

(peut-être que /bin/dash ou /bin/sash pourrait être plus approprié que /bin/sh)

ou encore mieux, utilisez l'utilitaire batch , par exemple

batch << EOB
   your commands
EOB

L'historique contiendrait alors sh ou batch qui n'a pas beaucoup de sens

10

Vous pouvez commencer votre session avec

export HISTFILE=/dev/null ;history -d $(history 1)

puis continuez avec vos actions sournoises. Définir le fichier d'historique sur /dev/null sera enregistré dans le fichier d'historique, mais cette entrée sera facilement supprimée et aucune trace (au moins dans le fichier d'historique) ne sera affichée.

En outre, ceci est non permanent.

7
Christian

Comme mentionné par @Doodad dans les commentaires, unset HISTFILE le fait bien, mais si vous souhaitez également supprimer un historique, faites echo $HISTFILE pour obtenir l'emplacement du fichier d'historique (généralement ~/.bash_history), puis unset HISTFILE, puis éditez ~/.bash_history (ou tout ce que HISTFILE était - bien sûr, il est maintenant unset et vous ne pouvez donc pas le lire).

$ echo $HISTFILE       # e.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history   # or your preferred editor

Ensuite, vous avez modifié votre historique et le fait que vous l'avez modifié!

4
drkvogel

Vous pouvez également utiliser la commande suivante:

echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')

Je pense que c'est une commande très portable

4
Cédric ROYER

Si vous utilisez zsh vous pouvez exécuter:

setopt histignorespace

Une fois que cela est défini, chaque commande commençant par un espace sera exclue de l'historique.

Vous pouvez utiliser aliases dans .zshrc pour activer on/off:

# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'

alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
2
Rotareti

Vous pouvez y parvenir de plusieurs manières. Ceci définit la taille du fichier d'historique sur 0:

export HISTFILESIZE=0

Ceci définit le fichier d’historique sur /dev/null, ce qui le désactive efficacement:

export HISTFILE=/dev/null

Pour des commandes individuelles, vous pouvez préfixer la commande avec un espace. Elle ne sera pas enregistrée dans le fichier d'historique. Notez que cela nécessite que vous ayez la valeur ignorespace incluse dans la variable d’environnement $HISTCONTROL (man bash et recherchez ignorespace pour plus de détails).

2
pgl

C'est pratique si vous voulez effacer toute l'histoire, y compris le fait que vous avez effacé toute l'histoire!

rm .bash_history;export HISTFILE=/dev/null;exit
1
cnd

Cette commande pourrait être utile. Cela n'enregistrera pas la commande qui est exécutée

historique -d $ ((HISTCMD-1)) &&

0
RAVI THEJA