使用仍在运行的 zsh 恢复覆盖的 .zshrc

使用仍在运行的 zsh 恢复覆盖的 .zshrc

在错误执行命令后,我不小心覆盖了我的.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

所有 z 样式:

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 的任何选项卡,我建议您检查 ~/.zshrc.backup。 (苹果系统)

答案4

我遇到了同样的问题,并且我可以记住文件中的确切字符串。我使用以下方法来查找内容并恢复它:

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

参考: https://unix.stackexchange.com/a/150423/503193

相关内容