.bashrc sobrescrito mas ainda originário - como pode ser recuperado?

19

Normalmente, quando encontro um comando que quero alias, faço o eco para o meu .bashrc assim:

[up button pressed to last command, then line edited so that it reads]
$echo "command-i-just-did" >> ~/.bashrc

Pode haver uma maneira melhor de fazer isso. Mas, de qualquer maneira, agora eu sobrescrevi o arquivo .rc inteiro usando uma única divisa. No entanto, como o .bashrc ainda é atual, ainda está aceitando meus antigos pseudônimos (por enquanto, é claro). Então, existe uma maneira de recuperá-lo?

ixtmixilix
fonte
6
echo "set -o noclobber" > ~/.bashrc(lembre-se de adicionar uma segunda cantoneira)
hhaamu
3
Pela próxima vez: Dicas para colocar o ~ sob controle de origem
Gilles 'SO- stop be evil'
1
Para o futuro: faça backup dos seus arquivos para que isso não seja um problema. Você também pode criar um arquivo separado para esses complementos rápidos e buscá-lo em algum lugar como o .bashrc. Fornece uma rede de segurança básica e você pode facilmente ligar e desligar, conforme necessário.
Joe
2
Você pode salvar suas configurações atuais, mas se você .bashrctiver alguma lógica que dependa de variáveis ​​locais como host, usuário etc., isso provavelmente é irrecuperável. A resposta real é restaurar do seu backup mais recente. Você tem um backup recente, certo?
jw013

Respostas:

22
  • alias sem parâmetro gera as definições de aliases definidos atualmente.
  • declare -f gera as definições das funções definidas atualmente.
  • export -p gera as definições das variáveis ​​definidas atualmente.

Todos esses comandos têm definições de saída prontas para serem reutilizadas. Você pode redirecionar suas saídas diretamente para uma nova ~/.bashrc.

Todas as listas conterão muitos elementos definidos em outro lugar, por exemplo, /etc/profilee /etc/bash_completion. Então você terá que limpar a lista manualmente.

homem a trabalhar
fonte
3
Eu também sugeriria iniciar do padrão .bashrcpara o seu sistema. No Debian está /etc/skel, ou você pode criar um novo usuário, se puder, para obter uma nova marca .bashrc.
enzotib
1
sete declare(sem argumentos) exibem tudo isso de uma vez.
rozcietrzewiacz
@enzotib, ótima idéia. Eu me perguntei onde o .bashrc padrão residiria ...
ixtmixilix 15/11/11
1

typeset -f > .bashrc deve fazê-lo, fornecendo tudo o que você tinha eram aliases.

Paul Tomblin
fonte
O functionscomando não existe para mim 4.2.10(2)-release. Você provavelmente quer dizer declare -f.
Chris Down
Na verdade, eu queria dizer "typeset -f"
Paul Tomblin