Manter configurações de shell em sincronia em várias máquinas
-
03-07-2019 - |
Pergunta
Eu sou um usuário de linha de comando bastante ativo e tenho shell contas em todo o lugar. MacBooks, máquinas de desktop Linux, servidores Linux, Cygwin no XP, o nome dele.
Como posso manter minha configuração shell (.bashrc
, .vimrc
etc.) em sincronia em todas essas máquinas usando as ferramentas limitados disponíveis em todas as plataformas?
Eu tenho usado rsync
de uma forma muito limitada que envolve copiar manualmente alguns arquivos sobre quando eu precisar deles, mas eu quero uma maneira padrão para a criação do mesmo ambiente shell básico em todas as minhas máquinas. Diga-me sua estratégia de gerenciamento de conta shell.
Solução
Eu tenho pasta no Dropbox com global, por OS, e por configurações escudo da máquina:
$ ls ~/Dropbox/shell/bash
bashbootstrap bashrc
bashrc-Darwin bashrc-Darwin-laptopname bashrc-Darwin-mininame
bashrc-Linux bashrc-Linux-machineone bashrc-Linux-machinetwo
bashrc
é carregado em cada máquina, bashrc-Linux
, bashrc-Darwin
são carregados nos seus respectivos sistemas operativos, e várias configurações são específicos para máquinas individuais. (By the way, Darwin é o nome do BSD-like kernel. OS X)
O que une tudo isso é o arquivo bashbootstrap
. Ele carrega cada arquivo de configuração aplicável em ordem crescente de especificidade, o que permite por OS e por substituições de máquinas a ter maior prioridade. Além disso, nós silenciosamente ignorar arquivos de configuração em falta; Você não precisa criar arquivos de configuração vazios para cada uma das suas máquinas para manter o feliz script.
Em uma nova máquina, depois de instalar o Dropbox em ~/Dropbox
, eu me afasto do .bashrc
padrão e apenas ligar simbolicamente o arquivo de inicialização em seu lugar em vez disso:
$ mv ~/.bashrc ~/.bashrc.bak
$ ln -s ~/Dropbox/shell/bash/bashbootstrap ~/.bashrc
Oh, e aqui estão os conteúdos do arquivo bashbootstrap
:
if [ -z "$PS1" ]; then
return
fi
dropboxshelldir=~/Dropbox/shell
dropboxdir=$dropboxshelldir/bash
masterbashrc=$dropboxdir/bashrc
osbashrc=$masterbashrc-`uname`
localbashrc=$osbashrc-`hostname | cut -d. -f1`
echo -n "Applicable shell configs: "
for bashfile in "$masterbashrc" "$osbashrc" "$localbashrc"; do
if [ -r $bashfile ]; then
. $bashfile
echo -n "`basename $bashfile` "
fi
done
echo
# Set convenience aliases
myed=${VISUAL:-${EDITOR:-vim}}
alias editbashrc="$myed $masterbashrc"
alias editosbashrc="$myed $osbashrc"
alias editlocalbashrc="$myed $localbashrc"
Uma nota final, este script também fornece três aliases de conveniência para editar seus arquivos de configuração Bash sem ter que lembrar de onde eles estão armazenados.
-
editbashrc
:. Editar o arquivo de configuração global -
editosbashrc
:. Editar o arquivo de configuração específicas do OS -
editlocalbashrc
:. Editar o arquivo de configuração específica da máquina
Eu só testei isso em Bash, mas poderia trabalhar em outro Bash como conchas. Mas, como dizem, sua milhagem pode variar.
Eu fiz um post sobre este aqui .
Outras dicas
Se você tem acesso ao controle de origem, eu tinha acabado de vê-los em. Desta forma, você começa a sincronizá-los em várias máquinas e você pode comparar / roll-back se for necessário. Se você não tem CVS / SVN no trabalho existem opções gratuitas disponíveis.