Recupere .zshrc sobrescrito com zsh ainda em execução

Recupere .zshrc sobrescrito com zsh ainda em execução

Substituí acidentalmente meu .zshrcarquivo após um comando executado incorretamente, que contém várias centenas de linhas de configurações. No entanto, ainda tenho 5 terminais que tinham o zsh aberto antes deste incidente e, como resultado, eles não foram afetados. No entanto,qualquer novo shell que eu abroperde toda a configuração do zsh e não tenho backup para isso.

Eu poderia simplesmente continuar usando esses 5 terminais, mas acho que deve haver alguma forma deextraia o zshrc da memória, já que aparentemente o zsh carrega o arquivo na memória quando é executado e o armazena lá até que seja eliminado. Eu tentei isso:

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

Mas tudo que consegui foram dados não relacionados ao meu zshrc.

Qualquer solução seria muito apreciada.

Responder1

Eu teria sugerido usar /proc/PID/fd/o diretório, mas zsh fecha o descritor de arquivo apontando para sua configuração após analisá-lo. A partir disso, meu melhor palpite é que seu arquivo em sua forma original desapareceu.

No entanto, existem maneiras de descartar a configuração atual do zsh, o que pode ajudá-lo a reconstruí-lo.A resposta desta outra pergunta vem à mente:

Todas as combinações de teclas:

for m ($keymaps) bindkey -LM $m

Todos os widgets de usuário ZLE

zle -lL

Todos os zstyles:

zstyle -L

Módulos carregados:

zmodload -L

Todas as variáveis:

typeset -p +H -m '*'

Com o zsh/parametersmódulo carregado, isso também incluirá aliases, opções, funções...

Responder2

Auto-resposta

Algumas outras coisas que descobri ao recuperar meu zsh sobrescrito:

Verifique se alguma cópia do zshrc ainda existe

Isso não aconteceu no meu caso, mas se por acaso houver uma versão de .zshrcalgum lugar (principalmente se o editor de código de sua escolha salvar automaticamente os arquivos em um local específico), há umpequenopossibilidade de ainda existir em algum lugar. Para encontrá-lo, execute isto:

sudo find . -name ".zshrc"

Procure nestes locais específicos:

  • Para usuários do Vim/Vi (depende da configuração - pode incluir /var/tmpou )~/.vim/sessions~/.local/share/nvim/swap
  • Para usuários do Atom -~/.atom/recovery
  • Para usuários do Emacs - por padrão você pode ter um arquivo chamado ~/.zshrc~disponível
  • Em geral -/tmp

Recuperando caminhos adicionados manualmente

Este script imprime todos os diretórios adicionados a $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")

Recuperar certos parâmetros

Use setpara listar todos os parâmetros, depois grepatravés daqueles que você precisa, como: o editor padrão ( EDITOR) e o pager ( PAGER)

Responder3

Eu tive o mesmo problema. Felizmente, o arquivo ~/.zshrc.backup tinha o conteúdo anterior do meu arquivo .zshrc. Copiei seu conteúdo para restaurar. Sugiro verificar ~/.zshrc.backup se você não fechou nenhuma guia com o .zshrc anterior em execução. (Mac OS)

Responder4

Eu tive o mesmo problema e consegui me lembrar de uma string exata no arquivo. Usei o seguinte para encontrar o conteúdo e recuperá-lo:

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

Referências: https://unix.stackexchange.com/a/150423/503193

informação relacionada