در صورتیکه بعد از خواندن این یادداشت بخواهید به هر شکلی در تکمیلش مشارکت کنید، مثلا آن را اصلاح کنید یا مطلبی به آن اضافه کنید، منبع این یادداشت روی گیت‌هاب در این آدرس در دسترس است:
https://github.com/kiamazi/kiavash.one/blob/master/content/blog/2020-02-25-zsh-corrupt-history-file.md
میتوانید آن‌را ویرایش کنید. البته باید یادآوری کنم که هر ویرایشی قبل از اتشار نیاز به تایید دارد.

اگر از zsh استفاده می‌کنید یکی از مشکلاتی که ممکن است هراز گاهی با آن روبرو شوید یک فایل تاریخچه‌ی خراب شده است که مانع دسترسی شما به تاریخچه دستورات تایپ شده و اجرای صحیح عملکردها و دستورهایی مانند history، fc یا Crtl+R می‌شود.

خطایی که با آن مواجه می‌شوید چیزی شبیه به خط زیر است:

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

چه کار کنیم؟

حل این مشکل یک راه حل ساده در ۴قدم دارد،

  • به دایرکتوری خانه برگردید،
  • فایل تاریخچه را تغییر نام دهید.
  • تاریخچه را بازسازی کنید.
cd ~
mv .zsh_history .zsh_history_bad
strings .zsh_history_bad > .zsh_history
fc -R .zsh_history
  • بعد از چک کردن درستی مراحل، فایل تغییر نام داده شده را هم پاک می‌کنیم.
rm ~/.zsh_history_bad

ساختن یک اسکریپت

اگر برای شما هم مثل من بیشتر از چندبار این اتفاق افتاده و حوصله تکرار این مراحل را هم ندارید، می‌توانید تمام مراحل بالا را در قالب یک اسکریپت ذخیره کنید و یک بار برای همیشه خودتان را راحت کنید.

برای این‌کار در دایرکتوری ~/bin یا هرجای دیگری که برای اجرای اسکریپت‌های دستوری در $PATH خود مشخص کرده‌اید، یک فایل جدید، با اسمی شبیه به zsh_history_fix یا هر اسم دیگری که دوست دارید، بسازید و تمام مراحل بالا را در آن ذخیره کنید.

cd ~/bin
touch zsh_history_fix

فایل zsh_history_fix را با هر ادیتوری که می‌خواهید باز کنید و چند خط‌ زیر را در آن کپی کنید

#!/usr/bin/env zsh

mv ~/.zsh_history ~/.zsh_history_bad
strings ~/.zsh_history_bad > ~/.zsh_history
fc -R ~/.zsh_history
rm ~/.zsh_history_bad

و در نهایت فایل ساخته شده را قابل اجرا کنید

chmod +x zsh_history_fix

از این به بعد هروقت که لازم داشتید از هر مسیری که هستید، دستور زیر را در خط فرمان تایپ کنید

zsh_history_fix

منبع انگلیسی

How to fix a corrupt zsh history file

دسته بندی: linux برچسب‌ها: zsh،  shell،  linux،  لینوکس
این وبلاگ از disqus برای سیستم نظردهی استفاده می‌کند، اگر فرم نظردادن را نمی‌بینید احتمالا کسی به جای شما تشخیص داده که این سرویس مناسبتان نیست و آن را از دسترس شما خارج کرده، برای نظردادن در این شرایط از ابزار رفع فیلتر استفاده کنید