Синхронизация конфигураций оболочки на нескольких машинах
Я довольно активный пользователь командной строки, и у меня везде есть учетные записи оболочки. 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 как оболочки. Но, как говорится, ваш пробег может отличаться.
Я сделал пост в блоге об этом здесь.
Если у вас есть доступ к управлению исходным кодом, я бы просто зарегистрировал их. Таким образом, вы сможете синхронизировать их на нескольких машинах и при необходимости сможете сравнить / откатить. Если у вас нет CVS/SVN на работе, доступны бесплатные опции.
Я предпочитаю несколько разные файлы конфигурации для Vim, Fish, Sway и т. д. на разных машинах, поэтому я создал программу (filetailor) для обработки этого, а затем синхронизировал результат с Git.
filetailor — это программа Python с открытым исходным кодом, которая может вносить небольшие изменения в файлы с использованием переменных, специфичных для устройства, или с помощью комментариев, специфичных для устройства, в файлах.
Например, следующая строка будет закомментирована на каждом устройстве, кроме устройства с именем хоста.
device1
.
alias MYHOME='/home/dev1home/' #{filetailor device1}