Histoire rongée


15

En mode gui, lorsqu'un utilisateur a plus d'un terminal ouvert, comment les terminaux réécrivent-ils le fichier historique de cet utilisateur? la raison pour laquelle je demande est parce que, il est tout à fait possible que dans chacun des terminaux, l'utilisateur finisse par exécuter des commandes différentes. Alors, le fichier historique finit-il par sauvegarder les commandes de tous les terminaux ou seulement du premier à ouvrir? Ou existe-t-il un autre type de système qui est utilisé pour faire face à cette situation?

Réponses:


11

Cela dépend entièrement de la façon dont le shell choisit de le gérer

bashpar défaut, le fichier d'historique sera écrasé par l'historique local de chaque shell à sa sortie, donc le dernier shell à quitter l'emportera. L' histappendoption le fera s'ajouter à l'historique maître à la place ( shopt -s histappend).

zsh fait de même par défaut, et a quelques options pour y faire face:

  • appendhistory - L'historique de chaque shell est ajouté au fichier historique principal à la sortie du shell
  • incappendhistory - Le fichier d'historique principal est mis à jour chaque fois qu'une ligne est exécutée dans un shell, au lieu d'attendre que ce shell se termine
  • sharehistory- Comme incappendhistory, mais extrait également les modifications du fichier d'historique principal dans tous les shells en cours d'exécution, vous pouvez donc exécuter une commande dans un shell, puis frapper Updans un autre shell et la voir

Maintenant, dites-moi comment faire cela dans Bash s'il vous plaît;)
tante

1
@tante shopt -s histappendne fonctionne pas?
Michael Mrozek

0

J'ai d'abord eu cette idée dans le livre O'Reilly "Unix Power Tools".

Dans mon .profileje mets:

export HISTFILE=$HOME/.sh_hist.$$

Chaque fois que mon .profileest lu, je reçois un nouveau fichier historique nommé avec le PID de ma session. Si j'ai plusieurs connexions, chaque connexion obtient un fichier historique unique. Fonctionne dans kshetbash .

Si vous ouvrez simplement de nouveaux terminaux dans une session X, ceux-ci ne sont généralement pas des shells de connexion, mais vous pouvez les configurer pour qu'ils agissent comme des shells de connexion. Par exemple, rxvt +lsva commencerrxvt comme un shell de connexion. Vérifiez les documents pour le terminal que vous utilisez.

De plus, à moins que vous n'utilisiez un fichier .logoutou .bash_logout(ou tout autre moyen) pour nettoyer, vous finirez par avoir un crapload de .sh_histfichiers.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.