Dropbox ile makineler arasında .bashrc paylaşılmasının yan etkileri?


22

Hepsi Ubuntu çalıştıran birçok makinede çalışıyorum (her zaman aynı sürüm değil). Komut istemime göre bazı temel özelleştirmeler var, tüm makinelerde kullanılabilir olmasını istiyorum.

Şu anda Dropbox kullanıyorum ve diğer tüm "nokta dosyalarımı", örneğin .vim / .vimrc .gitconfig .ackrc. Sonra onları Dropbox klasörümden ana klasörüme bağlarım. Voilà, senkronize olan tüm makineler.

Bashrc ile böyle bir şey yapmanın yankılarının ne olduğundan emin değilim. Herhangi biri bir öneride bulunabilir mi? Belki bashrc içinde ayrı bir dosya yüklemek için kolay bir yol?

Yanıtlar:


28

Gerçek bir yankı görmüyorum, ama sanırım orada ne olduğuna bağlı! Her yerde aynı şekilde çalışan hızlı takma adlar ve kozmetik ürünler varsa, hiçbir sorun görmüyorum.

Ya .bashrcDropbox klasörünüzdeki herhangi bir yere götürebilir ya da makinelerin her birine eşleştirebilirsiniz.

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

Aslında, ana klasörümde aslında Dropbox hesabımdaki paylaşılan klasörlere benzeyen birkaç nokta dosyası var.

Başka bir seçenek, dropbox klasörünüzün içinden kaynaklanacak bir dosya oluşturabilmenizdir .bashrc:

Yani, senin içinde .bashrc, koymak:

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

ve ardından tüm makinelerde kullanmak istediğiniz şeyleri içeren bir bashrc-paylaşılan ayarları dosyası oluşturun ve ayrı .bashrcdosyalar tutabilirsiniz .

(Aynı zamanda sourcesadece .bash olarak kısaltabilirsiniz.)


Örneğime göre ayarlanmış diğer nokta dosyalarım var, ben sadece bash ile pek aşina değilim ve Ubuntu'nun içine koyduğu tüm varsayılan şeylerin ne kadar "özel" olduğundan emin değildim. Devam edip önerdiğiniz kaynak yöntemi kullanacağım. Teşekkür ederim!
Alan Peabody

8

Aklıma gelen en önemli risk, senkronizasyonun yedeklemeyle aynı olmadığını hatırlamanız gerektiğidir. Herhangi bir hata, tüm makinelerinizle senkronize edilecektir.

Ayrı bir dosyayı ~/.bashrceklemek için buna benzer bir şey ekleyin:

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

Burada ~ / .foo ayrı bir dosyadır.


1
Haklısın! Ama neyse ki, dropbox dosyalarınızın revizyonunu koruyor, böylece işler otomatik olarak yedekleniyor :)
Alex

Büyük öneri için teşekkür ederim, ikinci bir dosyayı el ile alacağım ve muhtemelen bu sözdizimini kullanacağım.
Alan Peabody

6

Genellikle yapılandırma dosyalarını merkezileştirmek iyi bir şeydir! Belirli bir işletim sistemi veya ana bilgisayar adından yola çıkarak ne çalıştığını özelleştirmek istiyorsanız, .bashrc'nizde aşağıdakilere benzer bir şey yapabilirsiniz:

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

Ardından, bir .bash dizini ve altındaki os ve host dizinlerini oluşturun ve istediğiniz ayarları <whatever> .sh adlı dosyalara yerleştirin; burada <whatever> os türü veya istediğiniz ana bilgisayardır.

Tüm bu dosyaları dropbox'ta tutuyorum ve Dropbox klasörümde link_dropbox adında bir bash betiği var.

#!/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

2

.Bashrc dosyamı Dropbox'ta diğer birçok yapılandırma dosyasıyla (.gitconfig, .vimrc, vb.) Birlikte görüyorum.

Makineyi bağımsız tutmak isteyebileceğim diğer ayarlar için sonunda .bashrc_local adlı bir dosyaya kaynak veriyorum.

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

1

Dropbox ile senkronizasyon yapmak harika, ancak sunucuya Dropbox yüklemek istemiyorsanız, yöntemimi uygulayabilirsiniz.

  1. Dropbox klasörünüzdeki paylaşılan bash ayarlarınızla bir dosya oluşturun.

  2. Dosyaya sağ tıklayın ve Dropbox menüsünden "Bağlantı Paylaş" ı tıklayın.

  3. Ardından "Bağlantı Al" ı tıklayın. Bu paylaşılan bağlantıyı panonuza kopyalayacaktır.

  4. Paylaşılan dosyanın sonuna? Dl = 1 ekleyin. Bu ham dosyayı almanızı sağlar. Paylaşılan bağlantınızın şimdi benimkine benzemesi gerekiyor: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Bu satırı ~ / .bashrc dosyasına ekleyin.

    source $HOME/.bash_shared_settings

  6. Bu komutu kullanarak tercih ettiğiniz aralıklarla bir cronjob oluşturun (Dropbox Paylaşılan Dosyanızı değiştirin!)

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

Bu, her yarım saatte bir ~ / .bash_shared_settings kopyanızı günceller. Oturumunuzu her yeniden yüklediğinizde, en son değişiklikleri dahil edersiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.