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