Dampak berbagi. Bashrc lintas mesin dengan Dropbox?

22

Saya bekerja pada banyak mesin yang berbeda, semuanya menjalankan Ubuntu (tidak selalu versi yang sama). Saya memiliki beberapa penyesuaian yang sangat mendasar untuk prompt saya, saya ingin tersedia di semua mesin.

Saat ini saya menggunakan Dropbox dan menyimpan semua "file dot" saya di sana, seperti .vim / .vimrc .gitconfig .ackrc. Saya kemudian hanya menautkannya ke folder rumah saya dari folder Dropbox saya. Voa, semua mesin dalam sinkronisasi.

Saya tidak yakin apa akibat dari melakukan sesuatu seperti ini dengan bashrc saya. Adakah yang bisa menawarkan saran? Mungkin cara mudah untuk memuat file terpisah di bashrc?

Alan Peabody
sumber

Jawaban:

28

Saya tidak melihat dampak nyata, tetapi saya kira itu tergantung pada apa yang Anda miliki di sana! Jika hanya alias cepat yang berfungsi sama di mana-mana, dan barang kosmetik, saya tidak melihat masalah apa pun.

Anda bisa memindahkan Anda .bashrcke suatu tempat di folder Dropbox Anda dan kemudian menghubungkannya di setiap mesin.

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

Saya sebenarnya memiliki beberapa dotfile di folder rumah saya yang sebenarnya merupakan symlink ke folder bersama di akun Dropbox saya.

Opsi lain adalah Anda dapat membuat file di dalam folder dropbox Anda untuk dipasok oleh .bashrc:

Yaitu, di Anda .bashrc, masukkan:

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

dan kemudian membuat file bashrc-shared-settings yang merupakan hal yang ingin Anda gunakan pada semua mesin, dan Anda masih dapat menyimpan .bashrcfile terpisah .

(Anda juga dapat menyingkat sourcehanya .dalam bash.)

luar biasa
sumber
Saya memiliki set file dot saya yang lain sesuai dengan contoh Anda, saya hanya tidak begitu akrab dengan bash dan tidak yakin bagaimana "spesial" semua hal standar yang dimasukkan oleh Ubuntu. Saya akan melanjutkan dan menggunakan metode sumber yang Anda sarankan. Terima kasih!
Alan Peabody
8

Risiko utama yang dapat saya pikirkan adalah Anda harus ingat bahwa sinkronisasi tidak sama dengan membuat cadangan. Kesalahan apa pun akan disinkronkan ke semua mesin Anda.

Untuk memasukkan file terpisah ke dalam ~/.bashrcsesuatu tambahkan Anda seperti ini:

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

Di mana ~ / .foo adalah file terpisah.

andrewsomething
sumber
1
Kamu benar! Tapi untungnya, dropbox menyimpan revisi file-file Anda, jadi semuanya didukung secara otomatis :)
Alex
Terima kasih atas saran yang bagus, saya akan secara manual mencari file kedua dan saya mungkin akan menggunakan sintaks ini.
Alan Peabody
6

Biasanya, memusatkan file konfigurasi adalah hal yang baik! Jika Anda ingin menyesuaikan apa yang dijalankan berdasarkan OS atau nama host yang diberikan, Anda dapat melakukan sesuatu seperti berikut ini di .bashrc Anda:

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

Kemudian, buat direktori .bash dan direktori os dan host di bawahnya dan letakkan pengaturan kustom apa pun dalam file yang disebut <wh whatever> .sh di mana < wh Apapun> adalah tipe os atau host yang ingin Anda sesuaikan.

Saya menyimpan semua file ini di dropbox, dan saya memiliki skrip bash yang disebut link_dropbox di folder Dropbox saya yang membantu saya memfasilitasi menghubungkannya di:

#!/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
Alaska
sumber
2

Saya menjaga .bashrc saya disinkronkan di Dropbox bersama dengan banyak file konfigurasi lainnya (.gitconfig, .vimrc, dll.).

Saya sumber file bernama .bashrc_local di akhir untuk pengaturan lain yang saya ingin menjaga mesin independen.

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

Menyinkronkan dengan Dropbox bagus, tetapi jika Anda tidak ingin menginstal Dropbox di server, Anda dapat menerapkan metode saya.

  1. Buat file dengan pengaturan bash Anda bersama di folder Dropbox Anda.

  2. Klik kanan file dan klik "Bagikan Tautan" dari menu Dropbox.

  3. Kemudian klik "Dapatkan Tautan." Ini akan menyalin tautan yang dibagikan ke clipboard Anda.

  4. Tambahkan? Dl = 1 ke akhir file bersama. Ini memungkinkan Anda mendapatkan file mentah. Tautan yang Anda bagikan sekarang seharusnya terlihat seperti milik saya: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Tambahkan baris ini ke ~ / .bashrc

    source $HOME/.bash_shared_settings

  6. Buat cronjob dengan interval pilihan Anda menggunakan perintah ini (Ganti dengan File Bersama Dropbox Anda!)

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

Ini akan memperbarui salinan ~ / .bash_shared_settings Anda setiap setengah jam. Setiap kali Anda memuat ulang sesi Anda, Anda akan menyertakan perubahan terbaru.

Nick Woodham
sumber