Pourquoi quelqu'un ne définirait-il pas histappend dans bash?

36

Après avoir découvert ce que cela shopt -s histappend signifie , cela semble être un paramètre très sain d'esprit et je suis surpris que ce ne soit pas le cas par défaut. Pourquoi quelqu'un voudrait-il effacer son historique à chaque sortie de shell?

Tshepang
la source
Outre le malentendu sur ce que fait cette option - corrigé par @maxscchlepzig -, "par défaut" a au moins deux sources: bash"pure" ou fournie par la distribution .bashrc. pour les anciens, @Gilles est probablement correct. dans ce dernier sens, -s histappend est par défaut sur, par exemple, Debian, depuis 2008: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d
3
Eh bien, Unix n'est pas vraiment célèbre pour ses défauts sains? Je m'attendais par défaut aux défauts les plus hostiles: P (mineur exagéré)
olejorgenb

Réponses:

34

Eh bien, quand histappendn'est pas défini, cela ne signifie pas que l'historique est effacé à chaque sortie de shell. Sans histappendbash, le fichier d’historique au démarrage est lu en mémoire - pendant le fonctionnement, de nouvelles entrées sont ajoutées - et à la sortie du shell, les dernières lignes HISTSIZE sont écrites dans le fichier historique sans ajout, c’est-à-dire qu’elles remplacent le contenu précédent.

Par exemple, si le fichier historique contient 400 entrées, 10 nouvelles entrées sont ajoutées lors de l'exécution de bash - histsize est défini sur 500, alors le nouveau fichier d'historique contient 410 entrées.

Ce comportement n'est problématique que si vous utilisez plusieurs instances bash en parallèle. Dans ce cas, l'historique ne contient que le contenu du dernier shell existant.

Indépendamment de ceci: Certaines personnes veulent effacer leur historique à la sortie du shell pour des raisons de confidentialité.

maxschlepzig
la source
De plus, pour des raisons de sécurité, il peut être judicieux de ne pas enregistrer l'historique pour l'utilisateur root. Cette fonctionnalité permet à root d’avoir un historique du shell sans que celui-ci soit enregistré sur le disque.
Mei
1
+1 pour "ne signifie pas que l'historique est effacé à chaque sortie de shell". Ceci est parfaitement expliqué ailleurs - mais peut-être pas assez succinctement pour atteindre certains lecteurs, surtout dans le contexte du nom de l'option (OK, j'aurais peut-être été l'un de ces lecteurs pendant un certain temps). @Mei, comment une permutation de ou non histappenda-t-elle une pertinence pour savoir si rootl'histoire atteint un disque? Encore une fois, cela n'affecte que ce qui est écrit, pas si .
underscore_d
5
quelqu'un exécute-t-il moins de 2 instances bash? histappendainsi que HISTCONTROL=ignoredups:erasedups:ignorespacesemble être un bon défaut pour la plupart des gens.
Dashesy
L' histappendefficacité est-elle sans signification si j'ai HISTFILESIZE=et HISTSIZE=pour une histoire infinie?
Marc.2377
1
@dashesy Personnellement, je n'aime pas ignorer / effacer les entrées en double. J'ai activé HISTTIMEFORMAT et j'aime pouvoir revenir en arrière et voir quand j'ai émis une commande ... et si je l'ai émise plusieurs fois, j'aime savoir quand chacune d'entre elles a été émise. C'est une préférence personnelle, à laquelle leur appartient. ;)
msb
9

Pour la compatibilité historique, je suppose. L' histappendoption n'existait pas avant bash 2.0.

Gilles, arrête de faire le mal
la source
1
L'histoire a-t-elle été écrasée à chaque fois?
Tshepang
3
@Tshepang: Oui, comme si tu n'utilisais pas histappend.
Gilles 'SO- arrête d'être méchant' le
ça devrait être la valeur par défaut maintenant mais ce n'est pas le cas
dashy