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


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

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

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

3 9

3 ответа:

У меня есть папка на Dropbox с конфигурациями global, per OS и per machine shell:

$ 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. Он загружает каждый применимый конфигурационный файл в порядке увеличения специфичности, что позволяет переопределениям per OS и per machine иметь более высокие значения старшинство. Кроме того, мы молча пропускаем отсутствующие конфигурационные файлы; вам не нужно создавать пустые конфигурационные файлы для каждой из ваших машин, чтобы сохранить сценарий счастливым.

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

$ 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, таких как shells. Но, как говорится, ваш пробег может отличаться.

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

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

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