Suspendre temporairement bash_history sur un shell donné?

116

Existe-t-il un moyen de suspendre temporairement le suivi de l’historique dans bash, de manière à entrer dans une sorte de mode "incognito"? J'entre des informations dans mon terminal que je ne veux pas, des informations financières sensibles.

Naftuli Kay
la source

Réponses:

153

Cela devrait être ce que vous cherchez:

unset HISTFILE

De man bash

Si HISTFILE n'est pas défini ou si le fichier d'historique n'est pas enregistrable, l'historique n'est pas enregistré.

Alternativement, si vous voulez le désactiver puis le réactiver, il sera peut-être plus facile à utiliser set:

Éteindre

set +o history

Allumer

set -o history
SiegeX
la source
12
La valeur de HISTFILEn'est vérifiée que lorsque bash se ferme, de sorte que la première méthode ne fonctionne pas telle quelle (si vous restaurez la valeur, la commande sera enregistrée). set +o historyne fonctionne comme dirigé.
Gilles
6
Merci, excellent Je vais utiliser set +o historyet set -o historybasculer quand je fais des trucs secrets;)
Naftuli Kay
1
unset HISTFILEne marche pas. set -/+o historyfonctionne comme un charme! merci
kholofelo maloma
4
Comme astuce si vous mettez un espace avant commande (démarrez la commande avec un espace), il ne sera pas enregistré dans votre historique, et les touches fléchées haut / bas ne l’indiqueront pas non plus.
Mahdi
1
Cela ne fonctionnera pas en zsh btw
Shubham Chaudhary
33

À l'aide de bash, définissez HISTCONTROL="ignorespace"et faites précéder d'un espace toute commande que vous ne souhaitez pas enregistrer dans l'historique. Si vous avez oublié de prendre des mesures, vous pouvez également history -d <number>supprimer une entrée spécifique ou history -ceffacer l’historique complet des commandes.

forcefsck
la source
27

Assurez-vous que HISTCONTROLcontient ignorespace. Vous voudrez probablement ajouter HISTCONTROL=ignorespace( HISTCONTROL=ignoredups:ignorespaceou quelque chose) à votre ~/.bashrc. Ensuite, toute ligne de commande commençant par un espace est omise de l'historique.

Une autre possibilité consiste à démarrer une nouvelle session bash qui n'enregistre pas l'historique.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell
Gilles
la source
5

Si vous devez éviter de stocker plusieurs commandes et que vous souhaitez toujours utiliser la flèche vers le haut pour accéder aux commandes précédentes, utilisez:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

Il existe quatre manières (niveaux) de contrôler la manière dont les commandes sont stockées.

  1. La première et la plus simple consiste à utiliser ignorespace(ou à ignorer):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    Cela permettra d'utiliser un espace avant les commandes que vous souhaitez éviter d'être enregistrées dans la liste de mémoire history. En conséquence, aucune commande enregistrée en mémoire pouvant être envoyée au fichier évitera également l’ envoi d’ une commande au fichier répertorié dans $HISFILE.

  2. Évitez d’enregistrer des commandes dans le fichier dans $HISTFILE:

    $ unset HISTFILE

    Si non défini, l'historique des commandes n'est pas enregistré lorsqu'un shell se ferme.

    Null HISTFILE=''et / ou paramétré pour HISTFILE=/dev/nullfonctionner dans le même sens. Comprenez que les commandes sont toujours enregistrées dans la liste de mémoire, essayez la historycommande ou la flèche vers le haut.

    Attention: si HISTFILE est réinitialisé avant que le shell existe, tout ce qui a été enregistré en mémoire pourrait quand même être écrit dans le fichier.

  3. Évitez d’enregistrer de nouvelles commandes dans l’historique. Et, comme ne pas être en mémoire, ne peut pas être enregistré dans un fichier.

    $ shopt -ou history              # or set +o history

    Réactiver avec shopt -os history(ou set -o history)

  4. Supprime toutes les commandes de la liste d'historique en mémoire:

    $ HISTSIZE=0

    Toutes les commandes sont effacées (de la mémoire) et par conséquent, rien ne peut être stocké dans un fichier, bien sûr, jusqu'à ce que la variable soit redéfinie sur une valeur numérique valide.

Isaac
la source
//, Ceci couvre toutes les réponses sauf la réponse de @Ambrose dans une page pratique. Bien joué, @ Isaac. Seriez-vous prêt à ajouter un lien ou deux aux documents pour cela? Je suis sûr que cela man historyne va pas le couper pour la plupart d'entre nous.
Nathan Basanese
1
@NathanBasanese Expanded. Mieux?
Isaac
// , Oui! Aurais-je raison de supposer que celles-ci proviennent des variables Bash et de la documentation intégrée Shopt ?
Nathan Basanese
// De plus, alors que je lisais la documentation sur les variables Bash , je suis tombé HISTIGNORE, que subsumesla fonction de HISTCONTROL.
Nathan Basanese
(En supposant que vous utilisiez linux): Que se passera-t-il si vous exécutez la commande LESS=+'/^ *HISTI' man bash(n'est-ce pas les "pages de manuel"?). @NathanBasanese
Isaac
3

Il existe un moyen simple de désactiver l'historique pour que les commandes ne soient pas stockées dans le .bash_historyfichier.

Vous devez mettre les espaces ou les espaces de tabulation devant toute commande afin que cette commande ne soit pas stockée dans l'historique. Par exemple:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

La pwdcommande ne sera pas enregistrée dans l'historique, car elle comporte des espaces à l'avant.

Kalanidhi M.
la source
Cela ne fonctionne pas; Bash se plaint que '-' ou '-history', ou d'autres commandes avec un trait d'union, sont introuvables.
Samuel A. Falvo II
2
Cela ne fonctionnera que si HISTCONTROL = "ignorespace" est défini comme dans la réponse de forcefsck
DeveloperChris
1
export HISTFILE=/dev/null 

C'est ma façon de faire. HISTORY / HISTFILE / HISTCONTROL, etc ... ne fonctionne pas, l'exporter vers / dev / null a toujours fonctionné pour moi.

Ambroise
la source
Pour suspendre temporairement l'histoire? Cela n'a pas fonctionné pour moi en tant que commande régulière. Les commandes suivantes ont été enregistrées dans l'historique. Appelez-vous cela dans .bash_profile ou un script? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel