Восстановить перезаписанный .zshrc с помощью все еще работающего zsh

Восстановить перезаписанный .zshrc с помощью все еще работающего zsh

Я случайно перезаписал свой .zshrcфайл после неправильно выполненной команды, которая содержит несколько сотен строк конфигураций. Однако у меня все еще есть 5 терминалов, на которых был открыт zsh до этого инцидента, и в результате они не затронуты. Однако,любая новая оболочка, которую я открываютеряет всю конфигурацию zsh, а у меня нет для нее резервной копии.

Я мог бы просто продолжать использовать эти 5 терминалов, но я думаю, что должен быть какой-то способизвлечь zshrc из памяти, так как zsh якобы загружает файл в память при запуске и хранит его там, пока не будет завершен. Я пробовал это:

sudo dd if=/dev/mem bs=1M count=256|hexdump -C > ramfile

Но все, что я получил, — это данные, не имеющие отношения к моему zshrc.

Любые решения будут высоко оценены.

решение1

Я бы предложил использовать /proc/PID/fd/каталог, но zsh закрывает дескриптор файла, указывающий на его конфигурацию после его разбора. Из этого я делаю лучшее предположение, что ваш файл в его первоначальном виде исчез.

Однако существуют способы сохранить текущую конфигурацию zsh, что может помочь вам ее перестроить.На ум приходит ответ на еще один вопрос:

Все привязки клавиш:

for m ($keymaps) bindkey -LM $m

Все пользовательские виджеты ZLE

zle -lL

Все zstyles:

zstyle -L

Загруженные модули:

zmodload -L

Все переменные:

typeset -p +H -m '*'

При zsh/parametersзагрузке модуля в него также будут включены псевдонимы, опции, функции...

решение2

Самостоятельный ответ

Вот еще несколько вещей, которые я обнаружил при восстановлении перезаписанного zsh:

Проверьте, существует ли еще какая-либо копия zshrc.

В моем случае этого не произошло, но если случайно где-то есть версия .zshrc(особенно если ваш редактор кода автоматически сохраняет файлы в определенном месте), то естьмаленькийвозможность того, что он все еще существует где-то. Чтобы найти его, запустите это:

sudo find . -name ".zshrc"

Посмотрите в этих конкретных местах:

  • Для пользователей Vim/Vi (зависит от конфигурации — может включать /var/tmp, ~/.vim/sessionsили ~/.local/share/nvim/swap)
  • Для пользователей Atom -~/.atom/recovery
  • Для пользователей Emacs — по умолчанию у вас может быть файл с именем ~/.zshrc~available
  • Общий -/tmp

Восстановление вручную добавленных путей

Этот скрипт выводит все каталоги, добавленные в $PATH:

import subprocess
paths = subprocess.check_output("echo $PATH", shell=True, text=True)
list = paths.split(":")
for item in list:
    print("export PATH=" + item + ":$PATH")

Восстановить определенные параметры

Используйте setдля перечисления всех параметров, а затем grepвыберите нужные вам, например: редактор по умолчанию ( EDITOR) и пейджер ( PAGER)

решение3

У меня была та же проблема. К счастью, файл ~/.zshrc.backup имел предыдущее содержимое моего файла .zshrc. Я скопировал его содержимое для восстановления. Я предлагаю проверить ~/.zshrc.backup, если вы не закрыли ни одну вкладку с предыдущим запущенным .zshrc. (macOS)

решение4

У меня была та же проблема, и я мог вспомнить точную строку в файле. Я использовал следующее, чтобы найти содержимое и восстановить его:

grep -i -a -B100 -A100 'text in the deleted file' /dev/sda1

Использованная литература: https://unix.stackexchange.com/a/150423/503193

Связанный контент