Вплив на спільний доступ .bashrc на машинах із Dropbox?


22

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

Зараз я використовую Dropbox і зберігаю там усі мої інші "крапки", такі як мій .vim / .vimrc .gitconfig .ackrc. Потім я просто пов'язую їх із домашньою папкою зі своєї папки Dropbox. Voilà, всі машини синхронізовані.

Я не впевнений, які наслідки робити щось подібне з моїм bashrc. Чи може хтось запропонувати пропозиції? Можливо, простий спосіб завантажити окремий файл у bashrc?

Відповіді:


28

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

Ви можете просто перемістити своє місце .bashrcв папку Dropbox, а потім позначити його на кожному з машин.

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

У мене в домашній папці є досить багато точкових файлів, які насправді є посиланнями на спільні папки в моєму акаунті Dropbox.

Іншим варіантом є те, що ви можете створити файл у папці, що випадає, щоб отримати його .bashrc:

Тобто, у своєму .bashrc, покладіть:

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

а потім створіть файл налаштувань bashrc-спільних налаштувань, який ви хочете використовувати на всіх машинах, і ви можете зберігати окремі .bashrcфайли.

(Ви також можете скоротити sourceяк просто .в баш.)


У мене є інші файли точок, налаштовані згідно з вашим прикладом, я просто не так добре знайомий з bash і не знав, наскільки "особливі" всі речі, які Ubuntu вкладає туди. Я збираюся йти вперед і використовувати вихідний метод, який ви запропонували. Дякую!
Алан Пібоді

8

Основний ризик, про який я можу подумати, - це те, що ви повинні пам’ятати, що синхронізація - це не те саме, що резервне копіювання. Будь-які помилки будуть синхронізовані з усіма вашими машинами.

Щоб включити окремий файл у свій ~/.bashrcдодайте щось подібне:

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

Де ~ / .foo - окремий файл.


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 каталог і ОС і хост - директорії під які і поставити будь-які призначені для користувача настройки в файлах , які називаються <будь-який> .sh де <будь-який> тип ОС або хост ви хочете налаштувати.

Я зберігаю всі ці файли у 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

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 кожні півгодини. Щоразу, коли ви перезавантажуєте сеанс, ви будете включати останні зміни.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.