¿Repercusiones para compartir .bashrc entre máquinas con Dropbox?

22

Trabajo en muchas máquinas diferentes, todas ejecutando Ubuntu (no siempre la misma versión). Tengo algunas personalizaciones realmente básicas para mi solicitud que me gustaría tener disponibles en todas las máquinas.

Actualmente uso Dropbox y almaceno todos mis otros "archivos de puntos" allí, como mi .vim / .vimrc .gitconfig .ackrc. Luego simplemente los vinculo a mi carpeta de inicio desde mi carpeta de Dropbox. Voilà, todas las máquinas sincronizadas.

No estoy seguro de las repercusiones de hacer algo así con mi bashrc. ¿Alguien puede ofrecer sugerencias? Tal vez una manera fácil de cargar un archivo separado en el bashrc?

Alan Peabody
fuente

Respuestas:

28

No veo ninguna repercusión real, ¡pero supongo que depende de lo que tengas allí! Si solo se trata de alias rápidos que funcionan de la misma manera en todas partes, y cosas cosméticas, no veo ningún problema.

Puede moverlo .bashrca algún lugar de su carpeta de Dropbox y luego vincularlo en cada una de las máquinas.

  mkdir -p ~/Dropbox/dotfiles
  mv ~/.bashrc ~/Dropbox/dotfiles/.bashrc
  ln -s ~/Dropbox/dotfiles/.bashrc ~/.bashrc

De hecho, tengo bastantes archivos de puntos en mi carpeta de inicio que en realidad son enlaces simbólicos a carpetas compartidas en mi cuenta de Dropbox.

Otra opción es que podría crear un archivo dentro de su carpeta de Dropbox para que su fuente .bashrc:

Es decir, en tu .bashrc, pon:

source $HOME/Dropbox/dotfiles/bashrc-shared-settings

y luego cree un archivo bashrc-shared-settings que es el material que desea usar en todas las máquinas, y aún puede mantener .bashrcarchivos separados .

(También puede abreviar sourcecomo solo .en bash).

precioso
fuente
Tengo mis otros archivos de puntos configurados según su ejemplo, simplemente no estoy tan familiarizado con bash y no estaba seguro de cuán "especiales" son todas las cosas predeterminadas que Ubuntu pone allí. Voy a seguir adelante y usar el método fuente que sugirió. ¡Gracias!
Alan Peabody
8

El principal riesgo que se me ocurre es que debe recordar que la sincronización no es lo mismo que la copia de seguridad. Cualquier error se sincronizará con todas sus máquinas.

Para incluir un archivo separado en su ~/.bashrcagregar algo así:

if [ -f ~/.foo ]; then
    . ~/.foo
fi

Donde ~ / .foo es el archivo separado.

andrewsomething
fuente
1
¡Tienes razón! Pero afortunadamente, Dropbox mantiene las revisiones de sus archivos, por lo que las cosas se respaldan automáticamente :)
Alex
Gracias por la gran sugerencia, buscaré manualmente un segundo archivo y probablemente usaré esta sintaxis.
Alan Peabody
6

Por lo general, centralizar los archivos de configuración es algo bueno. Si desea personalizar lo que se ejecuta en función de un SO o nombre de host determinado, puede hacer algo como lo siguiente en su .bashrc:

export HOSTNAME=`hostname | cut -f1 -d'.'`

if [ -f ~/.bash/os/$OSTYPE.sh ]; then
    source ~/.bash/os/$OSTYPE.sh
fi

if [ -f ~/.bash/host/$HOSTNAME.sh ]; then
    source ~/.bash/host/$HOSTNAME.sh
fi

Luego, cree un directorio .bash y los directorios os y host debajo de eso y coloque cualquier configuración personalizada en los archivos llamados <whatever> .sh donde <whatever> es el tipo os o el host que desea personalizar.

Mantengo todos estos archivos en Dropbox, y tengo un script bash llamado link_dropbox en mi carpeta de Dropbox que me ayuda a facilitar la vinculación en:

#!/bin/bash

#Array of <source><space><link> target->symlink mappings
linkarray=( "~/Dropbox/config/bashrc ~/.bashrc"
            "~/Dropbox/config/bash ~/.bash"
            "~/Dropbox/config/vimrc ~/.vimrc"
            "~/Dropbox/config/vim ~/.vim"
            "~/Dropbox/config/ssh ~/.ssh"
            "~/Dropbox/config/screenrc ~/.screenrc"
            "~/Dropbox/bin ~/bin" )

#turn off globbing to split each entry on spaces
set -f
for entry in "${linkarray[@]}"
do
    targets=( $entry )
    #eval will expand the tildes
    eval from=${targets[0]}
    eval to=${targets[1]}
        #if the target exists and is not a symlink, err on the side of caution
        if [ -e "$to" -a ! -L "$to" ]
        then
            echo "$to exists and is not a link, skipping..."
        else
            #probably safe to delete an existing symlink
            if [ -e "$to" ]
            then
                rm $to
            fi
            ln -s $from $to
        fi
done
Alaska
fuente
2

Mantengo mi enlace simbólico .bashrc en Dropbox junto con muchos otros archivos de configuración (.gitconfig, .vimrc, etc.).

Obtuve un archivo llamado .bashrc_local al final para otras configuraciones que podría querer mantener la máquina independiente.

if [ -f ~/.bashrc_local ]; then
    . ~/.bashrc_local
fi
Rolo
fuente
1

La sincronización con Dropbox es excelente, pero si no desea instalar Dropbox en el servidor, puede implementar mi método.

  1. Cree un archivo con su configuración de bash compartida en su carpeta de Dropbox.

  2. Haga clic derecho en el archivo y haga clic en "Compartir enlace" en el menú de Dropbox.

  3. Luego haga clic en "Obtener enlace". Esto copiará el enlace compartido a su portapapeles.

  4. Agregue? Dl = 1 al final del archivo compartido. Esto le permite obtener el archivo sin formato. Su enlace compartido ahora debería ser similar al mío: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Agregue esta línea a ~ / .bashrc

    source $HOME/.bash_shared_settings

  6. Cree un cronjob con su intervalo preferido usando este comando (¡Reemplace con su archivo compartido de Dropbox!)

    */30 * * * * curl -sS https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1 > ~/.bash_shared_settings; chmod +x ~/.bash_shared_settings;

Esto actualizará su copia de ~ / .bash_shared_settings cada media hora. Cada vez que recargue su sesión, incluirá los últimos cambios.

Nick Woodhams
fuente