Синхронизация конфигураций оболочки на нескольких компьютерах
Я довольно активный пользователь командной строки, и у меня есть учетные записи shell повсюду. MacBook, настольные машины Linux, серверы Linux, Cygwin на XP, вы называете это.
Как сохранить конфигурацию оболочки(.bashrc
, .vimrc
и т.д.) синхронизировать все эти машины, используя ограниченные инструменты, доступные на всех платформах?
Я использую rsync
довольно ограниченным способом, который включает в себя ручное копирование некоторых файлов, когда они мне нужны, но я хочу стандартный способ настройки одна и та же базовая оболочка для всех моих машин. Расскажите мне вашу стратегию управления учетной записью shell.
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. Но, как говорится, ваш пробег может отличаться.
Я сделал запись в блоге об этом здесь.