tutorial robbyrussell for files best shell synchronization development-environment dotfiles

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.


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


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í .