使用仍在運行的 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

相關內容