Impossible d'augmenter la longueur de l'historique du shell bash Mac OSX

26

J'ai défini ~ / .bash_profile il y a quelque temps pour avoir plus de 500 lignes mais le système ne semble pas pouvoir le détecter.

Est-ce que tu sais pourquoi?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500
biotechnologies
la source

Réponses:

34

Vous devez également définir HISTSIZE=10000000.

HISTFILESIZEdétermine le nombre de lignes à conserver dans le fichier d'historique tandis que HISTSIZEdétermine le nombre de lignes à conserver en mémoire. Les deux par défaut à500

Exécutez echo $HISTFILESIZE $HISTSIZEavant d'effectuer la modification, puis à nouveau après. Vous devriez voir d' 10000000 500abord puis 10000000 10000000après.

Allan
la source
16

Vous devez exporter HISTSIZE et HISTFILESIZEvariables d'environnement dans votre ~/.bash_profilefichier.

Ajoutez les lignes suivantes dans votre ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000
Petr Javorik
la source
9

Répondre:

Tout ce que vous devez faire est défini HISTSIZEdans votre profil bash ( ~/.bash_profile). Vous pouvez laisser HISTFILESIZE unset . Cela configurera à la fois l'historique en mémoire et l'historique basé sur des fichiers.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Explication, informations supplémentaires.

Le problème est que HISTFILESIZE ne définit que l'historique maximum stocké dans un fichier lorsque vous démarrez une session. HISTSIZE est ce qui détermine le nombre de lignes enregistrées à la fin d'une session. Si HISTFILESIZE est plus grand que votre HISTSIZE, vous ne verrez jamais plus que votre HISTSIZE car le fichier est écrasé avec les commandes HISTSIZE ( sauf si vous définissez l'historique à ajouter, mais c'est un sujet distinct: recherchez histappenddans les commandes intégrées du shell pour cela) .

C'est la raison pour laquelle vous ne voyez aucun effet. Avec HISTSIZE par défaut (probablement 500), votre fichier d'historique est toujours écrasé par les commandes $ HISTSIZE les plus récentes. Tout ce qui est plus ancien (qui pourrait potentiellement augmenter la liste au-delà de $ HISTSIZE) est effacé.

Dans la plupart des cas, il n'est pas nécessaire de définir HISTFILESIZE indépendamment de HISTSIZE.

HISTSIZE détermine combien de lignes seront écrites dans le fichier historique. La liste des commandes est tronquée à la sortie, avant d'écrire dans le fichier historique, en conservant N lignes les plus récentes. Par défaut, cette liste écrase le fichier d'historique.

HISTFILESIZE détermine la taille du fichier d'historique (en lignes). Le fichier est tronqué au démarrage, en conservant N lignes les plus récentes. De plus, le fichier d'historique est potentiellement tronqué chaque fois que HISTFILESIZE est défini.

Enfin, bien qu'il semble ne pas être documenté, BASH définit HISTFILESIZE en fonction de HISTSIZE si HISTSIZE est défini au démarrage. J'ai essayé cela sur macOS et quelques variétés d'Ubuntu, et le comportement est cohérent. Si vous définissez HISTSIZE dans un fichier de lancement (et non via la ligne de commande), HISTFILESIZE sera défini pour correspondre. (Essayez-le vous-même: définissez HISTSIZE sur une valeur arbitrairement grande dans .bash_profile, quittez et démarrez un nouveau terminal, puis echo $HISTSIZE $HISTFILESIZEvous les trouverez correspondant.)

Par conséquent, il n'y a aucune raison de toucher HISTFILESIZE sauf si vous voulez des valeurs différentes, et les cas d'utilisation pour avoir des valeurs différentes sont rares (et impliquent généralement plus de paramètres de personnalisation de l'historique pour obtenir quelque chose d'utile).

Zim
la source
Tu as raison Zim. Le code source de Bash montre qu'il va juste définir HISTFILESIZE sur HISTSIZE si HISTFILESIZE n'est pas défini. git.savannah.gnu.org/cgit/bash.git/tree/…
robert