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.