Синхронизация конфигураций оболочки на нескольких компьютерах

StackOverflow https://stackoverflow.com/questions/218255

Вопрос

Я довольно активный пользователь командной строки, и у меня повсюду есть учетные записи оболочки.MacBook, настольные компьютеры с Linux, серверы Linux, Cygwin на XP - называйте как хотите.

Как я могу сохранить свою конфигурацию оболочки (.bashrc, .vimrc и т.д.) синхронизировано на всех этих машинах с использованием ограниченных инструментов, доступных на всех платформах?

Я использовал rsync довольно ограниченным способом, который включает в себя ручное копирование некоторых файлов, когда они мне понадобятся, но я хочу стандартный способ настройки одной и той же базовой среды оболочки на всех моих машинах.Расскажите мне о вашей стратегии управления учетной записью shell.

Это было полезно?

Решение

У меня есть папка в Dropbox с глобальными настройками для каждой операционной системы и для каждой машины:

$ ls ~/Dropbox/shell/bash
bashbootstrap  bashrc
bashrc-Darwin  bashrc-Darwin-laptopname  bashrc-Darwin-mininame
bashrc-Linux  bashrc-Linux-machineone  bashrc-Linux-machinetwo

bashrc загружается на каждую машину, bashrc-Linux, bashrc-Darwin загружаются в соответствующие операционные системы, и несколько конфигураций специфичны для отдельных машин.(Кстати, Darwin - это название BSD-подобного ядра OS X.)

Что связывает все это воедино, так это bashbootstrap файл.Он загружает каждый применимый конфигурационный файл в порядке возрастания специфичности, это позволяет переопределениям для каждой операционной системы и для каждого компьютера иметь более высокий приоритет.Кроме того, мы молча пропускаем недостающие конфигурационные файлы;вам не нужно создавать пустые конфигурационные файлы для каждой из ваших машин, чтобы скрипт работал нормально.

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

$ mv ~/.bashrc ~/.bashrc.bak
$ ln -s ~/Dropbox/shell/bash/bashbootstrap  ~/.bashrc

О, и вот содержимое этого bashbootstrap файл:

if [ -z "$PS1" ]; then
   return
fi

dropboxshelldir=~/Dropbox/shell
dropboxdir=$dropboxshelldir/bash
masterbashrc=$dropboxdir/bashrc
osbashrc=$masterbashrc-`uname`
localbashrc=$osbashrc-`hostname | cut -d. -f1`

echo -n "Applicable shell configs: "
for bashfile in "$masterbashrc" "$osbashrc" "$localbashrc"; do
  if [ -r $bashfile ]; then
    . $bashfile
    echo -n "`basename $bashfile` "
  fi
done
echo

# Set convenience aliases
myed=${VISUAL:-${EDITOR:-vim}}
alias editbashrc="$myed $masterbashrc"
alias editosbashrc="$myed $osbashrc"
alias editlocalbashrc="$myed $localbashrc"

Последнее замечание: этот скрипт также предоставляет три удобных псевдонима для редактирования ваших конфигурационных файлов Bash без необходимости запоминать, где они хранятся.

  • editbashrc: Отредактируйте глобальный конфигурационный файл.
  • editosbashrc: Отредактируйте конфигурационный файл для конкретной операционной системы.
  • editlocalbashrc: Отредактируйте конфигурационный файл для конкретной машины.

Я тестировал это только на Bash, но это могло бы работать и на других Bash-подобных оболочках.Но, как говорится, ваш пробег может быть разным.

Я сделал запись в блоге об этом здесь.

Другие советы

В прошлом я использовал для этого контроль версий ( svn , mercurial и т. д.). Вы можете настроить свой собственный сервер или использовать хостинг. Dropbox также работает.

Если у вас есть доступ к управлению исходным кодом, я просто зарегистрировал бы его. Таким образом, вы сможете синхронизировать их на нескольких машинах и при необходимости сможете сравнить / откатить. Если у вас нет CVS / SVN на работе, доступны бесплатные опции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top