Перемещение .bash_profile в Dropbox

9

Я хотел бы переместить мой файл .bash_profile в Dropbox, чтобы мои пользовательские функции терминала были доступны на всех моих компьютерах Mac. Возможно ли это и есть ли возможные последствия?

Например, у меня есть команда для выполнения git add и commit за один раз:

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

Я не смог найти никакой информации об этом.

swelet
источник
2
Я знаю, что у вас уже есть ответ, но он заставляет меня задуматься о простой ссылке на Dropbox .bash_profile. Что-то думать о.
JMY1000
@ JMY1000 с моим решением вы можете добавить дополнительные вещи в зависимости от машины, на которой вы работаете - просто поместите команды после ifоператора. Но вы правы, это также может быть символической ссылкой.
Матеуш Шлосек
2
ln -s ~/path/to/dropbox/bash_profile_file ~/.bash_profile
2426021684

Ответы:

18

У вас может быть дополнительный файл в папке Dropbox, а затем на каждом компьютере внутри вашего .bash_profileфайла поместите это:

FILE="/path/to/DropboxFolder/shared_bash_profile_file"
if [ -f $FILE ];
then
    source $FILE
fi
Матеуш Шлосек
источник
5
Поскольку FILE может быть использован для других приложений и тому подобного, вы ночью захотите назвать переменную как-то вроде «DROPBOX-RC»
grepsedawk
4

Я думаю, что это лучшая идея для загрузки в хранилище. Позвольте рассказать, как я это сделал.

Я версия всего ~/binкаталога. Мой .bash_profileнаходится в этом каталоге. Это $HOME/.bash_profileссылка на ~/bin/.bash_profile.

Моя .bash_profileвыглядит так:

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

Таким образом, я могу легко отслеживать изменения.

Чтобы сохранить обновление репо, вы можете создать скрипт cron или LaunchAgents, который извлекает изменения из вашего ~/binкаталога один раз в день:

cd ~/bin && git pull origin $(git name-rev --name-only HEAD)
jherran
источник
2
Какие преимущества это даст по сравнению с простым решением, которое представил Матеуш?
конфетка
2
У @swelet, с моей точки зрения, есть два основных преимущества: вы можете легко отменить изменения в точке и отслеживать все изменения.
Джерран
@jherran Или вы можете поместить git-репо в папку Dropbox. Хотя я думаю, что у Dropbox есть версии.
pydsigner 10.06.16
2
@pydsigner У меня были проблемы с репозиторием Git в Dropbox. Я предполагаю условия гонки, поскольку Dropbox пытается синхронизировать изменения в файле, который Git затем пытается открыть, пока он еще используется.
миллимус
Это решение неявно использует публичный репозиторий для критического системного файла, что может привести к проблемам с безопасностью. Dropbox и другие являются частными.
Новая Александрия
4

Не стоит помещать целое .bash_profileв Dropbox, изменяя пути Dropbox или через символическую ссылку. Разные машины могут требовать немного различного содержимого этого файла. Примеры: разные версии программного обеспечения, требующие другой конфигурации, разных путей, разных имен для таких вещей, как разделы под /dev/.

Сделайте это вместо этого: поместите все свои пользовательские функции и псевдонимы в файл, $HOME/Dropbox/my_functions.shа затем добавьте строку

. $HOME/Dropbox/my_functions.sh

в вашем .bash_profile.

Федерико Полони
источник