Repercussões para compartilhar .bashrc entre máquinas com o Dropbox?

22

Eu trabalho em muitas máquinas diferentes, todas executando o Ubuntu (nem sempre a mesma versão). Tenho algumas personalizações realmente básicas para o meu prompt que gostaria de ter disponíveis em todas as máquinas.

Atualmente, uso o Dropbox e armazeno todos os meus outros "arquivos de ponto", como meu .vim / .vimrc .gitconfig .ackrc. Depois, basta vinculá-los à minha pasta pessoal a partir da minha pasta do Dropbox. Voilà, todas as máquinas sincronizadas.

Não tenho certeza de quais são as repercussões de fazer algo assim com o meu bashrc. Alguém pode oferecer sugestões? Talvez uma maneira fácil de carregar um arquivo separado no bashrc?

Alan Peabody
fonte

Respostas:

28

Não vejo nenhuma repercussão real, mas acho que depende do que você tem aí! Se são apenas apelidos rápidos que funcionam da mesma maneira em todos os lugares e coisas cosméticas, não vejo problemas.

Você pode simplesmente movê-lo .bashrcpara algum lugar da pasta do Dropbox e depois vinculá-lo em cada uma das máquinas.

  mkdir -p ~/Dropbox/dotfiles
  mv ~/.bashrc ~/Dropbox/dotfiles/.bashrc
  ln -s ~/Dropbox/dotfiles/.bashrc ~/.bashrc

Na verdade, tenho alguns arquivos de ponto na minha pasta pessoal que são na verdade links simbólicos para pastas compartilhadas na minha conta do Dropbox.

Outra opção é que você pode criar um arquivo dentro da pasta dropbox para ser originado por .bashrc:

Ou seja, no seu .bashrc, coloque:

source $HOME/Dropbox/dotfiles/bashrc-shared-settings

e crie um arquivo de configurações compartilhadas bashrc, que é o material que você deseja usar em todas as máquinas, e você ainda pode manter .bashrcarquivos separados .

(Você também pode abreviar sourcecomo apenas .no bash.)

frabjous
fonte
Eu tenho meus outros arquivos de ponto configurados de acordo com o seu exemplo, eu apenas não estou tão familiarizado com o bash e não tinha certeza de quão "especial" todas as coisas padrão que o Ubuntu coloca. Vou seguir em frente e usar o método de origem que você sugeriu. Obrigado!
Alan Peabody
8

O principal risco que consigo pensar é que você deve se lembrar de que sincronização não é o mesmo que fazer backup. Quaisquer erros serão sincronizados com todas as suas máquinas.

Para incluir um arquivo separado em seu arquivo, ~/.bashrcadicione algo como:

if [ -f ~/.foo ]; then
    . ~/.foo
fi

Onde ~ / .foo é o arquivo separado.

andrewsomething
fonte
1
Você está certo! Mas, felizmente, dropbox mantém revisões dos seus arquivos, assim que material é feito automaticamente :)
Alex
Obrigado pela ótima sugestão, procurarei manualmente um segundo arquivo e provavelmente usarei esta sintaxe.
Alan Peabody
6

Geralmente, centralizar arquivos de configuração é uma coisa boa! Se você deseja personalizar o que é executado com base em um determinado SO ou nome de host, pode fazer algo como o seguinte em seu .bashrc:

export HOSTNAME=`hostname | cut -f1 -d'.'`

if [ -f ~/.bash/os/$OSTYPE.sh ]; then
    source ~/.bash/os/$OSTYPE.sh
fi

if [ -f ~/.bash/host/$HOSTNAME.sh ]; then
    source ~/.bash/host/$HOSTNAME.sh
fi

Em seguida, crie um diretório .bash e os diretórios OS e Host nele e coloque as configurações personalizadas nos arquivos chamados <whatever> .sh, em que <whatever> é o tipo de OS ou o host que você deseja personalizar.

Eu mantenho todos esses arquivos no dropbox e tenho um script bash chamado link_dropbox na minha pasta do Dropbox que me ajuda a facilitar a vinculação deles:

#!/bin/bash

#Array of <source><space><link> target->symlink mappings
linkarray=( "~/Dropbox/config/bashrc ~/.bashrc"
            "~/Dropbox/config/bash ~/.bash"
            "~/Dropbox/config/vimrc ~/.vimrc"
            "~/Dropbox/config/vim ~/.vim"
            "~/Dropbox/config/ssh ~/.ssh"
            "~/Dropbox/config/screenrc ~/.screenrc"
            "~/Dropbox/bin ~/bin" )

#turn off globbing to split each entry on spaces
set -f
for entry in "${linkarray[@]}"
do
    targets=( $entry )
    #eval will expand the tildes
    eval from=${targets[0]}
    eval to=${targets[1]}
        #if the target exists and is not a symlink, err on the side of caution
        if [ -e "$to" -a ! -L "$to" ]
        then
            echo "$to exists and is not a link, skipping..."
        else
            #probably safe to delete an existing symlink
            if [ -e "$to" ]
            then
                rm $to
            fi
            ln -s $from $to
        fi
done
Alasca
fonte
2

Eu mantenho meu .bashrc linkado no Dropbox junto com muitos outros arquivos de configuração (.gitconfig, .vimrc, etc).

Eu forneço um arquivo chamado .bashrc_local no final para outras configurações que talvez eu queira manter a máquina independente.

if [ -f ~/.bashrc_local ]; then
    . ~/.bashrc_local
fi
Rolo
fonte
1

A sincronização com o Dropbox é ótima, mas se você não quiser instalar o Dropbox no servidor, poderá implementar meu método.

  1. Crie um arquivo com suas configurações de bash compartilhadas na sua pasta do Dropbox.

  2. Clique com o botão direito do mouse no arquivo e clique em "Compartilhar link" no menu do Dropbox.

  3. Em seguida, clique em "Obter link". Isso copiará o link compartilhado para sua área de transferência.

  4. Adicione? Dl = 1 ao final do arquivo compartilhado. Isso permite que você obtenha o arquivo bruto. Seu link compartilhado agora deve ser semelhante ao meu: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Adicione esta linha a ~ / .bashrc

    source $HOME/.bash_shared_settings

  6. Crie um cronjob com seu intervalo preferido usando este comando (Substitua pelo seu arquivo compartilhado do Dropbox!)

    */30 * * * * curl -sS https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1 > ~/.bash_shared_settings; chmod +x ~/.bash_shared_settings;

Isso atualizará sua cópia de ~ / .bash_shared_settings a cada meia hora. Sempre que recarregar sua sessão, você incluirá as alterações mais recentes.

Nick Woodhams
fonte