GNU/Linux >> Tutoriels Linux >  >> Linux

Archiver l'historique sans quitter le shell ?

Je viens de réaliser qu'un workflow que j'utilise depuis des années ne fait pas ce qu'il est censé faire. Comme je ne m'en suis pas rendu compte depuis si longtemps, vous pourriez penser que cela ne vaut pas la peine d'y mettre beaucoup d'efforts, mais il s'avère qu'en ce moment, c'est devenu quelque peu important.

De quoi je parle ? D'accord, j'ai tmux en cours d'exécution avec plusieurs sessions et chaque session a des fenêtres différentes et ainsi de suite. Travailler comme ça, c'est merveilleux. Il y a cependant un inconvénient. Lorsque le serveur est redémarré, pour quelque raison que ce soit, il ferme toutes mes sessions. Assez juste, ne peut être évité et ne se produit pas souvent. Cependant, la partie ennuyeuse est que tous mes zsh ou bash history est parti aussi. C'est un problème. Je me fie à mon histoire, peut-être beaucoup trop.

Je contournais ce problème en appuyant sur fc -W (en zsh ) de temps en temps. Je pensais que cela ajouterait l'historique qui est dans la mémoire et je ne perdrais alors que la partie entre ma dernière invocation de fc -W et le redémarrage du serveur. Mais ce n'est pas ce qu'il fait. Si j'utilise fc -W dans une fenêtre, puis fc -W dans un autre, l'historique de la première fenêtre serait écrasé par l'historique de la deuxième fenêtre. J'aurais besoin d'utiliser fc -R d'abord, mais cela dupliquerait tout l'historique… en gros, j'utilisais mal le fc commander tout le temps.

Voici la question :Comment puis-je m'assurer de ne rien perdre de mon historique lorsque je suis dans tmux et il y a une coupure de courant soudaine? Remarque :

  • J'utilise l'historique infini, au cas où cela compterait.
  • Perdre une partie de l'historique est acceptable, c'est-à-dire que si je dois invoquer une commande à la main (ou dans un cronjob) et que je perds la partie de l'historique depuis la dernière exécution de la commande, c'est bien.
  • Quitter le terminal et en ouvrir un nouveau n'est pas la solution.
  • Je ne veux pas stocker mes commandes directement dans l'historique, car cela mélange différents historiques.
  • Solutions pour bash et zsh sont les bienvenus. zsh est préféré.

Modifier :Mettez en surbrillance la partie que tout le monde semble mal comprendre.

Réponse acceptée :

Dans zsh, utilisez fc -AI pour sauvegarder votre historique, pas fc -W . Utilisez -A , pas -W , sinon l'historique des autres instances de shell est écrasé. Et -I enregistre uniquement les nouvelles entrées de l'historique depuis le dernier enregistrement.

Connexe :Script BASH :comment affecter chaque ligne de sortie de commande à des valeurs dans un tableau ?

Compte tenu de votre flux de travail, plutôt que d'enregistrer manuellement, vous devriez probablement enregistrer l'historique automatiquement. Activez le inc_append_history option pour enregistrer chaque commande dans le fichier historique immédiatement avant son exécution.

Bien qu'il soit possible d'obtenir le même effet dans bash, il est plus difficile de partager correctement l'historique entre les instances de bash. Voir Conserver l'historique bash dans plusieurs fenêtres de terminal


Linux
  1. Comment utiliser la commande history sous Linux

  2. Pouvoir au peuple

  3. Personnalisation du shell Bash

  4. Le point de la commande externe `cd` ?

  5. Priorité des opérateurs logiques Shell &&, ||?

Comment utiliser la commande Linux history

Historique des correctifs en direct du noyau Linux

Qu'est-ce que le Shell sous Linux ?

Eternal Terminal - Un shell distant qui se reconnecte automatiquement sans interrompre la session

La boucle while dans les scripts shell

Comment redémarrer le shell GNOME à partir de la ligne de commande sans quitter les applications (X11 uniquement)