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

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

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

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

4 ответа

Решение

У меня есть папка на 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 на работе, доступны бесплатные опции.

Я предпочитаю несколько разные файлы конфигурации для Vim, Fish, Sway и т. д. на разных машинах, поэтому я создал программу (filetailor) для обработки этого, а затем синхронизировал результат с Git.

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

Например, следующая строка будет закомментирована на каждом устройстве, кроме устройства с именем хоста. device1.

      alias MYHOME='/home/dev1home/' #{filetailor device1}
Другие вопросы по тегам