Последствия совместного использования .bashrc на компьютерах с Dropbox?

22

Я работаю на множестве разных машин, на всех работает Ubuntu (не всегда одна и та же версия). У меня есть несколько действительно базовых настроек, которые я хотел бы иметь на всех машинах.

В настоящее время я использую Dropbox и храню там все остальные мои «точечные файлы», такие как .vim / .vimrc .gitconfig .ackrc. Затем я просто связываю их с моей домашней папкой из папки Dropbox. Вуаля, все машины синхронизированы.

Я не уверен, каковы последствия того, чтобы делать что-то подобное с моим bashrc. Может ли кто-нибудь предложить предложения? Может быть, простой способ загрузить отдельный файл в bashrc?

Алан Пибоди
источник

Ответы:

28

Я не вижу никаких реальных последствий, но я полагаю, это зависит от того, что у вас там! Если это просто быстрые псевдонимы, которые работают везде одинаково, и косметические вещи, я не вижу никаких проблем.

Вы можете либо просто переместить вашу .bashrcпапку в папку Dropbox, а затем создать ссылку на нее на каждой из машин.

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

На самом деле у меня есть довольно много файлов точек в моей домашней папке, которые на самом деле являются символическими ссылками на общие папки в моей учетной записи Dropbox.

Другой вариант заключается в том, что вы можете создать файл внутри папки Dropbox, чтобы получать его от .bashrc:

Т.е. по вашему .bashrc, положите:

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

а затем создайте файл bashrc-shared-settings, который вы хотите использовать на всех машинах, и вы все равно можете хранить отдельные .bashrcфайлы.

(Вы можете также сокращать sourceкак .в bash.)

радостный
источник
У меня есть другие мои точечные файлы, настроенные в соответствии с вашим примером, я просто не очень знаком с bash и не был уверен, насколько «особенными» являются все стандартные вещи, которые Ubuntu добавляет в него. Я собираюсь пойти дальше и использовать метод источника, который вы предложили. Спасибо!
Алан Пибоди
8

Главный риск, о котором я могу подумать, заключается в том, что вы должны помнить, что синхронизация - это не то же самое, что резервное копирование. Любые ошибки будут синхронизированы со всеми вашими машинами.

Чтобы включить отдельный файл в ваш файл ~/.bashrcдобавить что-то вроде этого:

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

Где ~ / .foo - это отдельный файл.

andrewsomething
источник
1
Вы правы! Но, к счастью, Dropbox хранит версии ваших файлов, поэтому резервное копирование выполняется автоматически :)
Alex
Спасибо за отличное предложение, я буду вручную искать второй файл и, вероятно, буду использовать этот синтаксис.
Алан Пибоди
6

Обычно централизация файлов конфигурации - это хорошо! Если вы хотите настроить то, что работает на основе данной ОС или имени хоста, вы можете сделать что-то вроде следующего в вашем .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

Затем создайте каталог .bash и каталоги os и host под ним и поместите любые пользовательские настройки в файлы с именем <what> .sh, где <what> - это тип os или хост, который вы хотите настроить.

Я храню все эти файлы в dropbox, и у меня есть скрипт bash link_dropbox в моей папке Dropbox, который помогает мне упростить связывание их в:

#!/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
Аляска
источник
2

Я сохраняю символическую ссылку .bashrc в Dropbox вместе со множеством других конфигурационных файлов (.gitconfig, .vimrc и т. Д.).

Я создаю файл с именем .bashrc_local в конце его для других настроек, которые я мог бы хотеть сохранить независимыми от машины.

if [ -f ~/.bashrc_local ]; then
    . ~/.bashrc_local
fi
Rolo
источник
1

Синхронизация с Dropbox - это хорошо, но если вы не хотите устанавливать Dropbox на сервер, вы можете реализовать мой метод.

  1. Создайте файл с вашими общими настройками bash в папке Dropbox.

  2. Щелкните правой кнопкой мыши файл и выберите «Поделиться ссылкой» в меню Dropbox.

  3. Затем нажмите «Получить ссылку». Это скопирует общую ссылку в ваш буфер обмена.

  4. Добавьте? Dl = 1 в конец общего файла. Это позволяет вам получить необработанный файл. Ваша общая ссылка теперь должна выглядеть примерно так же, как у меня: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1.

  5. Добавьте эту строку в ~ / .bashrc

    source $HOME/.bash_shared_settings

  6. С помощью этой команды создайте cronjob с вашим предпочтительным интервалом (замените его на общий файл Dropbox!)

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

Это будет обновлять вашу копию ~ / .bash_shared_settings каждые полчаса. Каждый раз, когда вы перезагружаете свой сеанс, вы будете включать последние изменения.

Ник Вудхэмс
источник