Répercussions sur le partage de .bashrc sur plusieurs machines avec Dropbox?

22

Je travaille sur beaucoup de machines différentes, toutes exécutant Ubuntu (pas toujours la même version). J'ai des personnalisations vraiment basiques à mon invite que j'aimerais avoir disponibles sur toutes les machines.

J'utilise actuellement Dropbox et j'y stocke tous mes autres "fichiers dot", comme mon .vim / .vimrc .gitconfig .ackrc. Je les relie ensuite simplement à mon dossier personnel à partir de mon dossier Dropbox. Voilà, toutes les machines synchronisées.

Je ne sais pas quelles sont les répercussions de faire quelque chose comme ça avec mon bashrc. Quelqu'un peut-il faire des suggestions? Peut-être un moyen facile de charger un fichier séparé dans le bashrc?

Alan Peabody
la source

Réponses:

28

Je ne vois aucune répercussion réelle, mais je suppose que cela dépend de ce que vous avez là-dedans! Si ce sont juste des alias rapides qui fonctionnent de la même manière partout et des trucs cosmétiques, je ne vois aucun problème.

Vous pouvez soit simplement déplacer votre .bashrcvers un endroit dans votre dossier Dropbox, puis le lier symboliquement sur chacune des machines.

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

J'ai en fait un certain nombre de fichiers dot dans mon dossier d'accueil qui sont en fait des liens symboliques vers des dossiers partagés dans mon compte Dropbox.

Une autre option est que vous pouvez créer un fichier à l'intérieur de votre dossier dropbox pour être sourcé par votre .bashrc:

C'est-à-dire, dans votre .bashrc, mettez:

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

puis créez un fichier de paramètres partagés bashrc qui est le contenu que vous souhaitez utiliser sur toutes les machines, et vous pouvez toujours conserver des .bashrcfichiers séparés .

(Vous pouvez également abréger sourcesimplement .en bash.)

frabjous
la source
J'ai mes autres fichiers de points configurés selon votre exemple, je ne suis tout simplement pas si familier avec bash et je ne savais pas à quel point "spécial" tous les trucs par défaut qu'Ubuntu met. Je vais continuer et utiliser la méthode source que vous avez suggérée. Merci!
Alan Peabody
8

Le principal risque auquel je peux penser est que vous devez vous rappeler que la synchronisation n'est pas la même chose que la sauvegarde. Toutes les erreurs seront synchronisées sur toutes vos machines.

Pour inclure un fichier distinct dans votre ~/.bashrcajout, ajoutez quelque chose comme ceci:

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

Où ~ / .foo est le fichier séparé.

andrewsomething
la source
1
Tu as raison! Mais heureusement, dropbox conserve les révisions de vos fichiers, donc les choses sont sauvegardées automatiquement :)
Alex
Merci pour la grande suggestion, je vais chercher manuellement un deuxième fichier et j'utiliserai probablement cette syntaxe.
Alan Peabody
6

Habituellement, la centralisation des fichiers de configuration est une bonne chose! Si vous souhaitez personnaliser ce qui s'exécute en fonction d'un système d'exploitation ou d'un nom d'hôte donné, vous pouvez faire quelque chose comme ceci dans votre .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

Ensuite, créez un répertoire .bash et les répertoires os et host sous celui-ci et placez tous les paramètres personnalisés dans des fichiers appelés <wthing> .sh<wthing> est le type de système d'exploitation ou l'hôte que vous souhaitez personnaliser.

Je garde tous ces fichiers dans Dropbox, et j'ai un script bash appelé link_dropbox dans mon dossier Dropbox qui m'aide à faciliter leur liaison dans:

#!/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
la source
2

Je garde mon .bashrc lié à Dropbox avec de nombreux autres fichiers de configuration (.gitconfig, .vimrc, etc.).

Je source un fichier appelé .bashrc_local à la fin de celui-ci pour d'autres paramètres que je pourrais vouloir garder indépendant de la machine.

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

La synchronisation avec Dropbox est géniale, mais si vous ne souhaitez pas installer Dropbox sur le serveur, vous pouvez implémenter ma méthode.

  1. Créez un fichier avec vos paramètres bash partagés dans votre dossier Dropbox.

  2. Faites un clic droit sur le fichier et cliquez sur "Partager le lien" dans le menu Dropbox.

  3. Cliquez ensuite sur «Obtenir le lien». Cela copiera le lien partagé dans votre presse-papiers.

  4. Ajoutez? Dl = 1 à la fin du fichier partagé. Cela vous permet d'obtenir le fichier brut. Votre lien partagé devrait maintenant ressembler au mien: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Ajoutez cette ligne à ~ / .bashrc

    source $HOME/.bash_shared_settings

  6. Créez un cronjob avec votre intervalle préféré en utilisant cette commande (remplacez-le par votre fichier partagé Dropbox!)

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

Cela mettra à jour votre copie de ~ / .bash_shared_settings toutes les demi-heures. Chaque fois que vous rechargez votre session, vous incluez les dernières modifications.

Nick Woodhams
la source