Pregunta

Soy un usuario de línea de comandos bastante activo y tengo cuentas shell por todas partes. 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 copiar manualmente 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 . Dime tu estrategia de administración de cuentas shell.

¿Fue útil?

Solución

Tengo una carpeta en Dropbox con configuraciones globales, por sistema operativo y por shell de 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 respectivos sistemas operativos, y varias configuraciones son específicas a máquinas individuales. (Por cierto, Darwin es el nombre del kernel tipo BSD de OS X.)

Lo que une todo es el archivo bashbootstrap . Carga cada archivo de configuración aplicable en orden creciente de especificidad, lo que permite que las excepciones por sistema y por máquina tengan mayor prioridad. 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 el script feliz.

En una máquina nueva, después de instalar Dropbox en ~ / Dropbox , muevo el .bashrc predeterminado y en su lugar simplemente vinculo 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 nota final, esta secuencia de comandos también proporciona tres alias de conveniencia para editar los archivos de configuración de Bash sin tener que recordar dónde están almacenados.

  • editbashrc : Edita 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 shells. Pero, como dicen, su millaje puede variar.

Hice una publicación de blog sobre este aquí .

Otros consejos

He usado el control de versiones para esto en el pasado ( svn , mercurial , etc ...). Puede configurar su propio servidor o utilizar uno alojado. Dropbox también funciona.

Si tiene acceso al control de código fuente, simplemente los registraría. De esta manera, podrá sincronizarlos en varias máquinas y podrá comparar / revertir si es necesario. Si no tiene CVS / SVN en el trabajo, hay opciones gratuitas disponibles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top