Repercussions to sharing .bashrc across machines with Dropbox?

I work on a lot of different machines, all running Ubuntu (not always the same version). I have some really basic customizations to my prompt I would like to have available on all machines.

I currently use Dropbox and store all my other “dot files” there, such as my .vim/ .vimrc .gitconfig .ackrc. I then just link them to my home folder from my Dropbox folder. VoilĂ , all machines in sync.

I am unsure what the repercussions of doing something like this with my bashrc is. Can any one offer suggestions? Maybe an easy way to load a separate file in the bashrc?

Asked By: Alan Peabody

||

I don’t see any real repercussions, but I suppose it depends on what you have in there! If it’s just quick aliases that work the same everywhere, and cosmetic stuff, I don’t see any issues.

You could either just move your .bashrc to someplace in your Dropbox folder and then symlink it on each of the machines.

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

I actually have quite a few dotfiles in my home folder which are actually symlinks to shared folders in my Dropbox account.

Another option is that you could create a file inside your dropbox folder to be sourced by your .bashrc:

I.e., in your .bashrc, put:

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

and then create a bashrc-shared-settings file which is the stuff you want used on all machines, and you can still keep separate .bashrc files.

(You can also abbreviate source as just . in bash.)

Answered By: frabjous

The main risk that I can think of is that you must remember that synchronization is not the same as backing up. Any mistakes will be synced to all of your machines.

To include a separate file in your ~/.bashrc add something like so:

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

Where ~/.foo is the separate file.

Answered By: andrewsomething

I keep my .bashrc symlinked in Dropbox along with lots of other config files (.gitconfig, .vimrc, etc).

I source a file called .bashrc_local at the end of it for other settings which I might want to keep machine independent.

if [ -f ~/.bashrc_local ]; then
    . ~/.bashrc_local
fi
Answered By: Rolo

Usually, centralizing configuration files is a good thing! If you want to customize what runs based off of a given OS or hostname, you can do something like the following in your .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

Then, create a .bash directory and the os and host directories under that and put any custom settings in files called <whatever>.sh where <whatever> is the os type or the host you want customized.

I keep all of these files in dropbox, and I have a bash script called link_dropbox in my Dropbox folder that helps me to facilitate linking them in:

#!/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
Answered By: Flowchartsman

Syncing with Dropbox is great, but if you don’t want to install Dropbox on the server, you can implement my method.

  1. Create a file with your shared bash settings in your Dropbox folder.

  2. Right click the file and click “Share Link” from the Dropbox menu.

  3. Then click “Get Link.” This will copy the shared link to your clipboard.

  4. Add ?dl=1 to the end of the shared file. This lets you get the raw file.
    Your shared link should now look similar to mine: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Add this line to ~/.bashrc

    source $HOME/.bash_shared_settings

  6. Create a cronjob with your preferred interval using this command (Replace with your Dropbox Shared File!)

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

This will update your copy of ~/.bash_shared_settings every half an hour. Every time you reload your session, you’ll include the latest changes.

Answered By: Nick Woodhams
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.