Ripercussioni sulla condivisione di .bashrc tra macchine con Dropbox?


22

Lavoro su molte macchine diverse, tutte con Ubuntu (non sempre la stessa versione). Ho alcune personalizzazioni di base al mio prompt che vorrei avere disponibili su tutte le macchine.

Attualmente uso Dropbox e memorizzo tutti gli altri "file dot" lì, come il mio .vim / .vimrc .gitconfig .ackrc. Quindi li collego alla mia cartella principale dalla mia cartella Dropbox. Voilà, tutte le macchine sincronizzate.

Non sono sicuro di quali siano le ripercussioni di fare una cosa del genere con la mia bashrc. Qualcuno può offrire suggerimenti? Forse un modo semplice per caricare un file separato nel bashrc?

Risposte:


28

Non vedo alcuna vera ripercussione, ma suppongo che dipenda da quello che hai lì dentro! Se sono solo alias veloci che funzionano allo stesso modo ovunque e cose cosmetiche, non vedo alcun problema.

Puoi semplicemente spostare il tuo .bashrcin un posto nella tua cartella Dropbox e quindi collegarlo simbolicamente su ciascuna delle macchine.

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

In realtà ho parecchi dotfile nella mia cartella home che sono in realtà collegamenti simbolici a cartelle condivise nel mio account Dropbox.

Un'altra opzione è che puoi creare un file all'interno della cartella della tua casella personale per essere fornito da .bashrc:

Cioè, nel tuo .bashrc, metti:

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

e quindi creare un file di impostazioni condivise bashrc che è il materiale che si desidera utilizzare su tutte le macchine e che è comunque possibile mantenere .bashrcfile separati .

(Puoi anche abbreviare sourcecome solo .in bash.)


Ho i miei altri file dot configurati come nel tuo esempio, non ho molta familiarità con bash e non ero sicuro di quanto "speciali" siano tutte le cose predefinite di Ubuntu. Ho intenzione di andare avanti e utilizzare il metodo sorgente che hai suggerito. Grazie!
Alan Peabody,

8

Il rischio principale che mi viene in mente è che devi ricordare che la sincronizzazione non è la stessa del backup. Eventuali errori verranno sincronizzati con tutte le tue macchine.

Per includere un file separato nel tuo ~/.bashrcaggiungere qualcosa del genere:

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

Dove ~ / .foo è il file separato.


1
Hai ragione! Ma per fortuna, Dropbox mantiene le revisioni dei tuoi file, quindi il backup delle cose viene eseguito automaticamente :)
Alex

Grazie per il grande suggerimento, cercherò manualmente un secondo file e probabilmente userò questa sintassi.
Alan Peabody,

6

Di solito, centralizzare i file di configurazione è una buona cosa! Se vuoi personalizzare ciò che viene eseguito in base a un determinato sistema operativo o nome host, puoi fare qualcosa di simile nel tuo .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

Quindi, crea una directory .bash e le directory os e host sotto quella e inserisci tutte le impostazioni personalizzate nei file chiamati <whatever> .sh dove <whatever> è il tipo di sistema operativo o l'host che desideri personalizzare.

Tengo tutti questi file in dropbox e ho uno script bash chiamato link_dropbox nella mia cartella Dropbox che mi aiuta a facilitare il collegamento in:

#!/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

2

Mantengo il mio .bashrc collegato a Dropbox insieme a molti altri file di configurazione (.gitconfig, .vimrc, ecc.).

Alla fine ho creato un file chiamato .bashrc_local per altre impostazioni che potrei voler mantenere indipendente dalla macchina.

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

1

La sincronizzazione con Dropbox è ottima, ma se non vuoi installare Dropbox sul server, puoi implementare il mio metodo.

  1. Crea un file con le tue impostazioni bash condivise nella cartella Dropbox.

  2. Fare clic con il tasto destro del mouse sul file e selezionare "Condividi collegamento" dal menu Dropbox.

  3. Quindi fare clic su "Ottieni collegamento". Questo copierà il link condiviso negli appunti.

  4. Aggiungi? Dl = 1 alla fine del file condiviso. Questo ti permette di ottenere il file raw. Il tuo link condiviso ora dovrebbe apparire simile al mio: https://dl.dropbox.com/s/h25q5c3czo6mnjo/shared_bash_settings.sh?dl=1

  5. Aggiungi questa riga a ~ / .bashrc

    source $HOME/.bash_shared_settings

  6. Crea un cronjob con il tuo intervallo preferito usando questo comando (Sostituisci con il tuo file condiviso di Dropbox!)

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

Questo aggiornerà la tua copia di ~ / .bash_shared_settings ogni mezz'ora. Ogni volta che ricarichi la sessione, includerai le ultime modifiche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.