Déplacer .bash_profile vers Dropbox

9

Je voudrais déplacer mon .bash_profile vers Dropbox pour que mes fonctions de terminal personnalisées soient disponibles sur tous mes Mac. Est-ce possible et y a-t-il des implications possibles?

Par exemple, j'ai une commande pour faire un git add et commit en une seule fois:

function gax() {
    git add .
    git commit -m "$1"
}

Je n'ai pas pu trouver d'informations à ce sujet.

swelet
la source
2
Je sais que vous avez déjà une réponse, mais cela me fait penser à un simple lien avec le dropbox .bash_profile. Quelque chose à quoi penser.
JMY1000
@ JMY1000 avec ma solution, vous pouvez mettre des éléments supplémentaires en fonction de la machine sur laquelle vous êtes - mettez simplement les commandes après la ifdéclaration. Mais vous avez raison, cela pourrait également être un lien symbolique.
Mateusz Szlosek
2
ln -s ~/path/to/dropbox/bash_profile_file ~/.bash_profile
2426021684

Réponses:

18

Vous pouvez avoir un fichier supplémentaire dans le dossier Dropbox, puis sur chaque machine à l'intérieur de votre .bash_profilefichier, mettez ceci:

FILE="/path/to/DropboxFolder/shared_bash_profile_file"
if [ -f $FILE ];
then
    source $FILE
fi
Mateusz Szlosek
la source
5
Étant donné que FILE peut être utilisé pour d'autres applications et autres, vous voulez nommer la variable quelque chose comme "DROPBOX-RC"
grepsedawk
4

Je pense que c'est une meilleure idée de télécharger vers un référentiel. Permettez-moi de vous dire comment je l'ai fait.

Je versionne tout le ~/binrépertoire. Mon .bash_profileest sur ce répertoire. Le $HOME/.bash_profileest un lien vers ~/bin/.bash_profile.

Mon .bash_profileressemble à ceci:

if [[ $OSTYPE == darwin* ]]; then
    . ~/bin/includes/exports-osx.sh
    . ~/bin/includes/bash-stuff-osx.sh
    . ~/bin/includes/aliases-osx.sh
    . ~/bin/includes/functions-osx.sh
elif [[ $OSTYPE == linux* ]]; then
    . ~/bin/includes/exports-linux.sh
    . ~/bin/includes/terminal-linux.sh
    . ~/bin/includes/aliases-linux.sh
    . ~/bin/includes/ssh-keys-linux.sh
    . ~/bin/includes/bash-stuff-linux.sh
fi

. ~/bin/includes/bash-stuff.sh
. ~/bin/includes/aliases.sh
. ~/bin/includes/powerline.sh
. ~/bin/includes/functions.sh
. ~/bin/includes/work-stuff.sh

De cette façon, je peux facilement suivre les changements.

Pour conserver la mise à jour du référentiel, vous pouvez créer un script cron ou LaunchAgents qui extrait les modifications de votre ~/binrépertoire une fois par jour:

cd ~/bin && git pull origin $(git name-rev --name-only HEAD)
jherran
la source
2
Quels avantages cela aurait-il par rapport à la solution simple présentée par Mateusz?
swelet
2
@swelet de mon point de vue, deux avantages principaux: vous pouvez facilement rétablir les modifications apportées à un point et vous pouvez suivre chaque changement.
jherran
@jherran Ou vous pouvez également mettre le dépôt git dans le dossier Dropbox. Je pense cependant que Dropbox a lui-même une version.
pydsigner
2
@pydsigner J'ai eu des problèmes avec un dépôt Git dans Dropbox. Je devine les conditions de concurrence alors que Dropbox tente de synchroniser les modifications dans un fichier que Git tente ensuite de rouvrir alors qu'il est encore utilisé.
millimoose
Cette solution utilise implicitement un dépôt public pour un fichier système critique, ce qui peut entraîner des problèmes de sécurité. Dropbox et autres sont privés.
New Alexandria
4

Ce n'est pas une bonne idée de mettre le tout .bash_profiledans Dropbox, soit en peaufinant les chemins Dropbox ou via un lien symbolique. Différentes machines peuvent nécessiter un contenu légèrement différent de ce fichier. Exemples: différentes versions de logiciels installées nécessitant une configuration différente, des chemins différents, des noms différents pour des choses telles que les partitions sous /dev/.

Faites-le à la place: mettez toutes vos fonctions et alias personnalisés dans un fichier $HOME/Dropbox/my_functions.sh, puis incluez la ligne

. $HOME/Dropbox/my_functions.sh

dans votre .bash_profile.

Federico Poloni
la source