99 votes

Comment faire : Historique illimité de Bash/Shell ?

Existe-t-il un moyen de définir un historique illimité dans Bash ?

90voto

morgenrot Points 1016

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

export HISTFILESIZE=
export HISTSIZE=

Et voilà, une histoire sans limite. Actuellement, j'ai 27000 entrées :)

De man bash :

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

Cela signifie que .bash_history n'est jamais tronquée

La même chose semble s'appliquer à HISTSIZE mais je n'ai pas trouvé de documentation à ce sujet.

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

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

export HISTTIMEFORMAT="%F %T "

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

55voto

fotinakis Points 651

Après de nombreuses et laides itérations et des cas limites bizarres au fil des ans, je dispose maintenant d'une section concise de mon .bashrc dédié à cela.

D'abord, vous devez commenter ou supprimer cette section de votre .bashrc (par défaut pour Ubuntu). Si vous ne le faites pas, alors 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, ajouter ceci au bas de votre fichier .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 "kill -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 une heure et demie), vous ne pourrez pas le charger. longtemps, longtemps ) vous ne remarquerez pas beaucoup d'effet sur le temps de démarrage de votre bash.

10voto

cdosborn Points 622

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 principal séparé (aucune session ne peut interrompre votre historique)

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

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

arrière-plan

Au démarrage interactif, si $HISTFILESIZE est défini comme un nombre, bash tronque $HISTFILE à ce numéro. Lors de la fermeture interactive, si l'option Shell histappend est défini, bash ajoute $HISTSIZE lignes vers $HISTFILE sinon il écrase $HISTFILE .

conseils pour OSX (Terminal)

Chaque fois qu'un onglet est créé dans le Terminal, ~/.bash_profile est lue, ce qui signifie que bash ne va pas continuer à lire 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 screen enregistre l'historique, il suffit de le configurer pour utiliser un login Shell qui va sourcer vos fichiers de démarrage bash (et enregistrer votre historique).

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

4voto

ChristopheD Points 5934

Un concept différent (peut ne pas être applicable) mais vous pouvez avoir unlimited historique lors de l'utilisation de Shell-sink .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X