web-dev-qa-db-fra.com

Histoire Bash illimitée

Je veux que mon fichier .bash_history soit illimité. par exemple. Je peux donc toujours revenir en arrière et voir comment j'ai construit/configuré quelque chose, ou quelle était cette commande astucieuse, ou comment une commande a cassé quelque chose il y a des semaines. Comment modifier ce paramètre?

302
Francis Haart

Définissez HISTSIZE et HISTFILESIZE dans .bashrc sur une chaîne vide:

HISTSIZE= 
HISTFILESIZE=

Dans bash 4.3 et versions ultérieures , vous pouvez également utiliser HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).
255
Lri

Après de nombreuses itérations importantes et laides et d'étranges cas Edge au fil des ans, j'ai maintenant une section concise de mon .bashrc consacrée à cela.

Tout d'abord, vous devez commenter ou supprimer cette section de votre .bashrc (valeur par défaut pour Ubuntu). Sinon, certains environnements (tels que les sessions screen) tronqueront toujours votre historique:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

Deuxièmement, ajoutez ceci au bas de votre .bashrc:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force Prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
Prompt_COMMAND="history -a; $Prompt_COMMAND"

Remarque: chaque commande est écrite immédiatement après son exécution. Par conséquent, si vous collez un mot de passe par inadvertance, vous ne pouvez pas simplement "tuer -9 %%" pour éviter l'écriture de l'historique, vous devez le supprimer manuellement.

Notez également que chaque session bash charge le fichier d’historique complet en mémoire, mais même si votre fichier d’historique atteint 10 Mo (ce qui prendra un temps long, long ), vous ne le ferez pas. remarquez beaucoup d'effet sur votre temps de démarrage bash.

378
fotinakis

Comme Jörg Beyer l'a mentionné ci-dessus, HISTSIZE et HISTFILESIZE sont essentiels.

En outre, vous devriez absolument vérifier la variable d'environnement HISTCONTROL, ce qui vous permet de faire des choses cool comme de ne pas stocker les commandes d'historique en double (HISTCONTROL=erasedups). Il est inutile d'avoir un historique illimité si vous devez parcourir des centaines de lignes de cd .. ou similaire.

Liens: ici , et travaillant avec l'historique bash . La variable bash FAQ est également vaut la peine d'être parcourue .

34
simont

Il y a (au moins) deux env env pertinents ici:

  • HISTSIZE: le nombre d'entrées dans l'historique
  • HISTFILESIZE: le nombre de lignes de l'historique

Je pense que nous pouvons convenir que le terme nlimited est souvent identique à très gros (ou avez-vous un stockage de fichiers illimité?). Il suffit donc de définir les valeurs très grandes.

22
Jörg Beyer