robbyrussell - Mantener las configuraciones de shell sincronizadas en varias máquinas
repository github oh my zsh (3)
Soy un usuario de línea de comando bastante activo y tengo cuentas de shell en todo el lugar. MacBooks, máquinas de escritorio Linux, servidores Linux, Cygwin en XP, lo que sea.
¿Cómo puedo mantener mi configuración de shell ( .bashrc
, .vimrc
, etc.) sincronizada en todas estas máquinas usando las herramientas limitadas disponibles en todas las plataformas?
He estado usando rsync
de una manera bastante limitada que implica la copia manual de algunos archivos cuando los necesito, pero quiero una forma estándar para configurar el mismo entorno de shell básico en todas mis máquinas. Cuéntame tu estrategia de administración de cuentas shell.
Si tiene acceso al control de código fuente, simplemente los verificaría. De esta forma, podrá sincronizarlos en varias máquinas y puede comparar / retrotraer si es necesario. Si no tiene CVS / SVN en el trabajo, hay opciones gratuitas disponibles.
Tengo una carpeta en Dropbox con configuraciones globales, por sistema operativo y por shell de la máquina:
$ ls ~/Dropbox/shell/bash
bashbootstrap bashrc
bashrc-Darwin bashrc-Darwin-laptopname bashrc-Darwin-mininame
bashrc-Linux bashrc-Linux-machineone bashrc-Linux-machinetwo
bashrc
se carga en cada máquina, bashrc-Linux
, bashrc-Darwin
se cargan en sus sistemas operativos respectivos, y varias configuraciones son específicas para máquinas individuales. (Por cierto, Darwin es el nombre del kernel BSD de OS X.)
Lo que lo une todo es el archivo bashbootstrap
. Carga cada archivo de configuración aplicable para aumentar la especificidad, lo que permite que prevalezca la precedencia por sistema operativo y por anulaciones de máquina. Además, omitimos silenciosamente los archivos de configuración faltantes; no necesita crear archivos de configuración vacíos para cada una de sus máquinas para mantener la secuencia de comandos feliz.
En una máquina nueva, después de instalar Dropbox en ~/Dropbox
, alejo el .bashrc
predeterminado y en su lugar, enlace simbólicamente el archivo bootstrap en su lugar:
$ mv ~/.bashrc ~/.bashrc.bak
$ ln -s ~/Dropbox/shell/bash/bashbootstrap ~/.bashrc
Ah, y aquí están los contenidos del archivo 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"
Una última nota, esta secuencia de comandos también proporciona tres alias de conveniencia para editar sus archivos de configuración de Bash sin tener que recordar dónde están almacenados.
-
editbashrc
: Edite el archivo de configuración global. -
editosbashrc
: edite el archivo de configuración específico del sistema operativo. -
editlocalbashrc
: edite el archivo de configuración específico de la máquina.
Solo probé esto en Bash, pero podría funcionar en otros Bash como conchas. Pero, como dicen, su kilometraje puede variar.
Hice una publicación en el blog sobre esto aquí .