215 votes

bash HISTSIZE contre HISTFILESIZE?

Quelle est la différence en HISTSIZE vs HISTFILESIZE?

Ils sont utilisés pour étendre bash histoire au-delà de la valeur par défaut de 500 lignes.

Il semble y avoir un manque de clarté ici et dans d'autres forums sur pourquoi ils sont tous deux nécessaires. (Exemple 1, Exemple 2, Exemple 3).

353voto

arturomp Points 3815

Réponse courte:

HISTSIZE est le nombre de lignes ou de commandes qui sont stockés en mémoire dans une liste de l'historique, tandis que votre bash session est en cours.

HISTFILESIZE est le nombre de lignes ou de commandes qui (a) sont autorisés dans le fichier de l'historique au moment du démarrage d'une session, et (b) sont stockés dans le fichier de l'historique à la fin de votre session bash pour une utilisation dans de futures sessions.

Avis de la distinction entre le fichier sur le disque et la liste en mémoire.

Réponse longue:

Toutes les infos ci-dessus + quelques exemples:

HISTFILESIZE=10 et HISTSIZE=10

  1. Vous commencez votre session.
    1. Votre HISTFILE (fichier qui stocke votre commande bash histoire), est tronqué à contenir HISTFILESIZE=10 lignes.
  2. Vous écrire 50 lignes.
  3. À la fin de votre 50 commandes, les commandes de 41 à 50 sont dans votre liste de l'historique, dont la taille est déterminée par HISTSIZE=10.
  4. Vous mettez fin à votre session.
    1. En supposant histappend n'est pas activé, les commandes de 41 à 50 sont enregistrés sur votre HISTFILE qui a maintenant le 10 commandes qu'il a tenu au début plus de 10 nouvellement écrit commandes.
    2. Votre HISTFILE est tronqué à contenir HISTFILESIZE=10 lignes.
  5. Vous avez maintenant 10 commandes dans votre histoire - les 10 dernières que vous venez de taper dans la session vient de se terminer.
  6. Lorsque vous démarrez une nouvelle session, vous recommencez à 1 avec un HISTFILE de HISTFILESIZE=10.

HISTFILESIZE=10 et HISTSIZE=5

  1. Vous commencez votre session.
    1. Votre HISTFILE (fichier qui stocke votre commande bash histoire), est tronqué à contenir au plus HISTFILESIZE=10 lignes.
  2. Vous écrire 50 lignes.
  3. À la fin de votre 50 commandes, commandes 46 à 50 sont dans votre liste de l'historique, dont la taille est déterminée par HISTSIZE=5.
  4. Vous mettez fin à votre session.
    1. En supposant histappend n'est pas activé, les commandes de 46 à 50 sont enregistrés sur votre HISTFILE qui a maintenant le 10 commandes qu'il a tenu au début plus de 5 nouvellement écrit commandes.
    2. Votre HISTFILE est tronqué à contenir HISTFILESIZE=10 lignes.
  5. Vous avez maintenant 10 commandes dans votre histoire - 5 à partir d'une session précédente, et les 5 derniers que vous venez de taper dans la session vient de se terminer.
  6. Lorsque vous démarrez une nouvelle session, vous recommencez à 1 avec un HISTFILE de HISTFILESIZE=10.

HISTFILESIZE=5 et HISTSIZE=10

  1. Vous commencez votre session.
    1. Votre HISTFILE (fichier qui stocke votre commande bash histoire), est tronqué à contenir au plus HISTFILESIZE=5 lignes.
  2. Vous écrire 50 lignes.
  3. À la fin de votre 50 commandes, les commandes de 41 à 50 sont dans votre liste de l'historique, dont la taille est déterminée par HISTSIZE=10.
  4. Vous mettez fin à votre session.
    1. En supposant histappend n'est pas activé, les commandes de 41 à 50 sont enregistrés sur votre HISTFILE qui a maintenant le 5 commandes qu'il a tenu au début plus de 10 nouvellement écrit commandes.
    2. Votre HISTFILE est tronqué à contenir HISTFILESIZE=5 lignes.
  5. Vous avez maintenant 5 commandes dans votre histoire - les 5 dernières que vous venez de taper dans la session vient de se terminer.
  6. Lorsque vous démarrez une nouvelle session, vous recommencez à l'étape 1 avec un HISTFILE de HISTFILESIZE=5.

Info de elixir_sinari:

L'histoire "fichier" n'est pas mis à jour à mesure que vous tapez les commandes. L' les commandes sont stockés dans une "liste" séparément (accessible par l'histoire de commande). Le nombre de ces stockées commandes est contrôlée par HISTSIZE valeur. Lorsque le shell (interactif) sorties de secours, le dernier $HISTSIZE lignes sont copiées/annexé à $HISTFILE de cette "liste". Si HISTFILESIZE est définie, à l'issue de cette opération, il est assuré que seulement $HISTFILESIZE lignes (dernière) existent dans $HISTFILE . Et lorsque le shell démarre, la "liste" est initialisé à partir de $HISTFILE jusqu'à un maximum de $HISTSIZE commandes.

Et à partir de l' man bash page:

La valeur de la HISTSIZE variable est utilisée comme le nombre de commandes pour enregistrer dans une liste de l'historique. Le texte de la dernière HISTSIZE commandes (par défaut 500) est enregistré. (...)

Au démarrage, l'histoire est initialisé à partir d'un fichier nommé par la variable HISTFILE (par défaut ~/.bash_history). Le fichier nommé par la valeur de HISTFILE est tronqué, si nécessaire, pour ne pas contenir plus que le nombre de lignes spécifié par la valeur de HISTFILESIZE. (...) Quand un shell interactif de sortie, le dernier $HISTSIZE lignes sont copiés à partir de l'histoire liste de $HISTFILE. Si le histappend shell option est activée (voir la description de shopt en vertu de commande interne du SHELL de COMMANDES ci-dessous), le les lignes sont ajoutées à la histoire de fichier, sinon le fichier d'historique est écrasé. Si HISTFILE est pas défini, ou si le fichier d'historique est unwritable, l'histoire n'est pas enregistré. (...) Après l'enregistrement de l'histoire, la histoire de fichier est tronqué pour ne pas contenir plus de HISTFILESIZE lignes. Si HISTFILESIZE n'est pas de jeu, pas de troncature est effectuée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X