pourquoi supprimer l'historique bash ne suffit pas?

15

Je pensais que la suppression de mon historique de bash était suffisante pour effacer mon historique de bash, mais hier mon chat jouait sur le côté droit de mon clavier et quand je suis rentré dans mon ordinateur, j'ai vu quelque chose que j'ai tapé il y a un mois, puis j'ai commencé à appuyez sur toutes les touches comme un fou à la recherche de ce qui aurait pu le déclencher. Il s'avère que la touche UPARROW affiche mon historique de bash même après la suppression de .bash_history.

Comment puis-je supprimer mon historique bash pour de vrai?

Bunden
la source
8
.bash_history est remplacé chaque fois que vous fermez un shell bash. Donc, si vous démarrez bash, supprimez .bash_history et vous déconnectez, vous n'aurez rien accompli.
Shadur
14
Votre chat mérite une énorme récompense. Vous utilisez bash depuis combien de temps sans découvrir qu'il a un rappel et une modification en ligne de commande? Retapez-vous simplement chaque ligne de commande à partir de zéro à chaque fois ou quelque chose? Cela rendrait la coque très désagréable à utiliser.
cas
@cas dix ans. Maintenant que vous le dites, j'appuie sur Uparrow pour répéter les commandes, mais je l'ai compris comme une sorte de mémoire «à court terme» ne dépassant pas quelques lignes. Je n'ai pas été averti que la suppression de .bash_history ne supprimera pas l'historique de bash.
bunden
La suppression ~/.bash_historysupprime vraiment ~/.bash_history.... mais (à moins que vous ne preniez des mesures pour l'empêcher, comme effacer l'historique en mémoire en exécutant history -cjuste avant de vous déconnecter ou de le paramétrer HISTFILE=/dev/nullou simplement de l' installer unset) bash ne fera que sauvegarder son historique actuel à sa sortie . BTW, la HISTSIZEvariable env indique à bash le nombre de lignes d'historique à conserver en mémoire et HISTFILESIZEindique à bash le nombre maximal de lignes d'historique à enregistrer. ces deux paramètres peuvent être définis, par exemple, votre ~/.bashrc. PS: votre chat mérite une 2ème récompense pour vous avoir enseigné une précieuse leçon :)
cas
@cas Je pense que la suppression de .bash_history devrait supprimer l'historique de bash. Cela me semble intuitif. Ce qui ne semble pas intuitif, c'est l'histoire -c, l'histoire -w, les variables non réglables .. c'est fou du point de vue de l'expérience utilisateur.
bunden

Réponses:

26

Dans certains cas (certaines versions bash), faire:

$ history -c; history -w

Ou simplement

$ history -cw

Effacera l' histoire en mémoire (flèches haut et bas aura aucune commande à la liste), puis d' écrire que le $HISTFILEfichier (si le $HISTFILEest tronqué par l'instance de bash en cours d' exécution).

Parfois, bash choisit de ne pas tronquer le $HISTFILEfichier même avec l' histappendoption non $HISFILEZIZEdéfinie et définie sur 0.

Dans de tels cas, l'option nuke fonctionne toujours:

history -c; >$HISTFILE

Cela efface l'historique des commandes enregistrées en mémoire et toutes les commandes précédemment enregistrées dans un fichier. Cela garantira que le shell en cours d'exécution n'a pas d'historique enregistré dans la mémoire ou sur le disque, cependant, d'autres instances en cours d'exécution de bash (où l'historique est actif) peuvent avoir une copie complète des commandes lues au $HISTFILEdémarrage de bash (ou lorsqu'une history -rest exécutée) .

S'il est également nécessaire que rien d'autre (pas de nouvelles commandes) de la session en cours ne soit écrit dans le fichier d'historique, alors, unset HISTFILEempêchera une telle journalisation.

Isaac
la source
1
Modifier HISTFILE et faire history -c && history -rremplacerait votre historique actuel par un historique modifié manuellement. Dans certains cas, cela peut être mieux que de jeter toute l'histoire.
Mikko Rantalainen
9

basha un historique de session en mémoire qui est écrit dans un fichier si la variable shell HISTFILEest définie sur un nom de fichier lors de la fermeture bash.

Si vous supprimez le fichier pointé par HISTFILE, désactivez cette variable et quittez bash, cette session shell ne laissera aucun historique persistant.

Le fait de ne pas définir la HISTFILEvariable mais de supprimer le fichier viderait simplement l'historique persistant, mais l'historique de la session en cours serait enregistré à la fermeture du shell.

Kusalananda
la source
3
A history -c; history -weffacera la mémoire et l'historique des fichiers. La suppression de HISTFILE n'est requise que si aucune autre commande ne doit être enregistrée dans l'historique (pas exactement ce qui a été demandé à IMhO).
Isaac
-1

"Comment puis-je supprimer mon historique bash pour de vrai?"

Quittez bash, démarrez un autre shell, supprimez le fichier d'historique bash.

ou

déconnexion, connectez-vous à un autre compte disposant d'une autorisation d'écriture sur le fichier d'historique, supprimez le fichier d'historique.

utilisateur
la source
-2

Tout en quittant la coque, faites tout en une fois, comme

echo "" > ~/.bash_history && history -c && exit
user853069
la source
@roaima, vous avez absolument raison, merci. Corrigée.
user853069