Синхронизация конфигураций оболочки на нескольких компьютерах
-
03-07-2019 - |
Вопрос
Я довольно активный пользователь командной строки, и у меня повсюду есть учетные записи оболочки.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-подобных оболочках.Но, как говорится, ваш пробег может быть разным.
Я сделал запись в блоге об этом здесь.
Другие советы
Если у вас есть доступ к управлению исходным кодом, я просто зарегистрировал бы его. Таким образом, вы сможете синхронизировать их на нескольких машинах и при необходимости сможете сравнить / откатить. Если у вас нет CVS / SVN на работе, доступны бесплатные опции.