Comment réparer et récupérer un “fichier historique corrompu” dans zsh?


101

Après un redémarrage, j'ai commencé à voir un message lors du chargement du shell:

zsh: corrupt history file /home/myusername/.zsh_history

Comment puis-je récupérer de cette situation et potentiellement récupérer une partie de l'historique?

Réponses:


170

J'ai trouvé un article de blog décrivant un correctif qui semble fonctionner pour moi, tout en restaurant mon historique manquant:

mv .zsh_history .zsh_history_bad
strings .zsh_history_bad > .zsh_history
fc -R .zsh_history

7
Puis-je demander ce que signifie la commande fc -R .zsh_history? J'ai essayé man fcet cela me dit cela No manual entry for fc, et personne ne pourrait fc -hme dire plus que l'utilisation. Merci.
Kenshinji

2
Pour plus de détails sur la commande fc, voir ici et ici . L'option -R n'y est pas présente, mais la liste de finitions zsh, parmi les options,-R -- read history from file
Jeffrey Lebowski

Quelqu'un sait ce que cette erreur aurait pu être causée?
hugronaphor

1
@hugronaphor Dans mon cas, c'était que je devais arrêter mon ordinateur portable. Cela a causé quelques problèmes pour moi car je l'ai fait lors d'une opération d'écriture sur disque et l'une des choses qui ont été corrompues était mon fichier zsh, entre autres choses.
RyanNerd

1
Pour obtenir la fcdocumentation appropriée , voir man zshbuiltinségalement disponible à l’ adresse zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html . Comme suggéré par Jeffrey, "'fc -R' lit l'historique du fichier donné".
Martin le

14

Supprimer simplement des caractères aléatoires peut également fonctionner:

  • vim .zsh_history

  • Supprimez tous les caractères étranges, qui seraient probablement près de la fin. (Dans mon cas, j'ai eu une chaîne de @dans l'avant dernière ligne, suite à un arrêt forcé)

  • :x (sauvegarder et quitter)

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.