URL:     https://linuxfr.org/users/raphj/journaux/restaurer-l-historique-de-zsh
Title:   Restaurer l’historique de zsh
Authors: raphj
Date:    2019-12-25T07:55:36+01:00
License: CC By-SA
Tags:    historique et zsh
Score:   13


Il y a quelques jours, mon historique zsh a apparemment été vidé, peut‑être à cause d’une fausse manip dont je parlerai peut‑être. Je crois avoir rempli mon `$HOME` complètement, et ça n’a peut‑être pas plu à zsh.

Mes shells n’enregistraient donc plus les nouvelles commandes dans le fichier `.zsh_history`, et surtout, ce fichier est devenu vide. Or, je tiens à mon historique ! Il y a un tas de commandes que je rappelle simplement en tapant leurs premières lettres. [J’envoie des textos](https://linuxfr.org/users/raphj/journaux/envoyer-un-sms-rapidement-depuis-le-terminal) à certains destinataires fréquents depuis le terminal en faisant `Ctrl` + `R` Prénom (le prénom étant dans la commande, parce que je le rajoute à la fin dans un commentaire, hé hé).

Perdre cet historique non sauvegardé est donc un drame. Ça m’est déjà arrivé, c’est quand même pénible. Je ne peux plus rien faire. Je n’ai plus qu’à quitter l’informatique et aller monter un refuge en montagne (ce qui est bien aussi, remarquez !). Alors, comment faire ?

Une instance de zsh qui tourne depuis plusieurs jours a encore un historique fonctionnel. Simplement, l’historique n’est plus écrit sur le disque. J’ai repoussé le moment de traiter le problème, mais à un moment l’ordi risque de planter, ou le terminal, et j’ai besoin de redémarrer pour appliquer les mises à jour… la libc a été mise à jour depuis le dernier démarrage quand même. Alors, comment faire ?

```shell
fc -W /tmp/zshhistory
```

Voilà ! Cette commande écrit l’historique dans le fichier indiqué et il suffit maintenant de le copier vers `$HISTFILE`, c’est‑à‑dire `~/.zsh_history` chez moi.

Je m’en vais ajouter une tâche Cron journalière pour copier ce fichier d’historique dans mon dossier synchronisé, par exemple dans `$DOSSIER/zsh_history-${HOST}`… Ça permettra aussi d’avoir accès à mon historique quand j’utilise un autre ordinateur.

Si vous n’avez pas la chance d’avoir une commande comme `fc` sur votre shell, vous pouvez toujours bidouiller avec la commande `history`, qui vous donne la liste des commandes, et reconstruire un fichier `~/.${SHELL}_history` manuellement :
    
```shell
history > /tmp/hist
```

Joyeux Noël si vous le fêtez. Sinon, joyeuse journée quand même. :-)
