GNU/Linux >> Tutoriels Linux >  >> Linux

Comment :Historique Bash/shell illimité ?

Ajoutez ceci à votre .bashrc (Linux) ou .bash_profile (Mac OS) :

export HISTFILESIZE=
export HISTSIZE=

Et voilà, historique illimité. Actuellement j'ai 27000 entrées :)

À partir de man bash :

Si HISTFILESIZE n'est pas défini, aucune troncature n'est effectuée.

Cela signifie .bash_history n'est jamais tronqué

La même chose semble également s'appliquer à HISTSIZE , même si je n'ai pas trouvé cela documenté.

Voici une autre fonctionnalité intéressante que je vais essayer :

Si le HISTTIMEFORMAT variable est définie, les horodatages sont écrits dans le fichier d'historique, marqués du caractère de commentaire d'historique, afin qu'ils puissent être conservés à travers les sessions shell, comme suit :

export HISTTIMEFORMAT="%F %T "

Faites-moi savoir si vous avez déjà essayé...


(en republiant ma réponse de https://stackoverflow.com/a/19533853/128597)

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

Tout d'abord, vous devez commenter ou supprimer cette section de votre .bashrc (par défaut pour Ubuntu). Si vous ne le faites pas, certains environnements (comme l'exécution de screen sessions) tronquera 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".
# https://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, donc si vous collez accidentellement un mot de passe, vous ne pouvez pas simplement "tuer -9 %%" pour éviter l'écriture de l'historique, vous devrez le supprimer manuellement.

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


Inclure dans ~/.bashrc :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

Cette réponse répond aux critères suivants :

  1. un historique maître séparé (aucune session ne peut interrompre votre historique)

  2. écriture automatique de l'historique (pas de raccourcis clavier)

  3. écritures peu fréquentes (pas d'ajout après chaque commande)

contexte

Au démarrage interactif, si $HISTFILESIZE est défini sur un nombre, bash tronque $HISTFILE à ce nombre. A la fermeture interactive, si l'option shell histappend est défini, bash ajoute $HISTSIZE lignes à $HISTFILE , sinon il écrase $HISTFILE .

conseils pour OSX (Terminal)

Chaque fois qu'un onglet est créé dans Terminal, ~/.bash_profile est lu, ce qui signifie que bash ne lit pas votre ~/.bashrc . Ajoutez la ligne suivante à votre ~/etc/bash_profile :

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

conseils pour l'écran

Si vous utilisez screen, votre fichier de configuration est ~/.screenrc. Si vous voulez que l'écran enregistre l'historique, il vous suffit de le configurer pour utiliser un shell de connexion qui sourcera vos fichiers de démarrage bash (et enregistrera votre historique).

# use bash, make it a login shell
defshell -bash

Linux
  1. Comment effacer l'historique de la ligne de commande BASH sous Linux

  2. Comment Bash sait-il comment il est invoqué ?

  3. Comment comparer des chaînes dans les scripts shell bash

  4. Comment désactiver la modification de mon historique dans bash

  5. Comment inclure un fichier dans un script shell bash

Comment activer l'horodatage dans l'historique de Bash sous Linux

Comment utiliser la commande Declare dans Linux Bash Shell

Comment installer Linux Bash Shell sur Windows 10

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Comment effacer l'historique de Bash sous Linux et Mac

Comment utiliser Linux Bash Shell dans Windows 10 ?