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.

Foi útil?

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

Eu usei controle de versão para isso no passado ( svn , mercurial , etc ...). Você pode configurar o seu próprio servidor, ou usar um hospedado. Dropbox também funciona.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top