Exécuter la 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?

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

Sachez que cela nécessite que la variable d’environnement $HISTCONTROL soit définie.

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

     #> echo $HISTCONTROL 
  • Pour append la variable d’environnement si elle est manquante, la ligne suivante peut être ajoutée au profil bash. Par exemple %HOME/.bashrc

     export HISTCONTROL=ignorespace 

Après avoir de nouveau recherché le profil, les commandes préfixées dans l’espace ne seront pas écrites dans $HISTFILE

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

export HISTFILE = / dev / null

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

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

La solution [UPDATE] @ Doodad est plus élégante, il suffit de désélectionner la variable: unset HISTFILE (merci!)

 echo "discreet";history -d $(history 1) 

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

 ; history -d $((HISTCMD-1)) 

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

Voici l’explication ..

L’historique -d supprime l’entrée mentionnée dans l’historique.

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

https://superuser.com/a/529193

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

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

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

ou même mieux utiliser l'utilitaire de lot , par exemple

 batch << EOB your commands EOB 

L'historique contiendrait alors sh ou batch qui n'est pas très significatif

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

Vous pouvez commencer votre session avec

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

puis continuez avec vos gestes sournois. La définition de histfile sur /dev/null sera consignée dans le fichier historique, mais cette entrée sera facilement supprimée et aucune trace (au moins dans le fichier histor) ne sera affichée.

De plus, ceci n’est pas permanent.

Comme mentionné par @Doodad dans les commentaires, unset HISTFILE fait bien, mais si vous voulez aussi supprimer un peu d’historique, faites echo $HISTFILE pour obtenir l’emplacement du fichier d’historique (généralement ~/.bash_history ), ~/.bash_history (ou quel que soit le HISTFILE – bien sûr, il est maintenant unset et vous ne pouvez pas le lire).

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

Ensuite, vous avez édité votre historique et le fait que vous l’avez édité!

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

 export HISTFILESIZE=0 

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

 export HISTFILE=/dev/null 

Pour les commandes individuelles, vous pouvez préfixer la commande avec un espace et 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 recherche de ignorespace pour plus de détails).

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 

Si vous utilisez zsh, vous pouvez exécuter:

 setopt histignorespace 

Après cela, chaque commande commençant par un espace sera exclue de l’historique.

Vous pouvez utiliser des alias dans .zshrc pour activer / désactiver cette fonction :

 # 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."' 

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

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

Vous avez juste besoin de courir:
$ set +o history

Pour voir plus, lancez:
$ man set