Domanda

Sono un utente della riga di comando piuttosto attivo e ho account di shell ovunque. MacBook, macchine desktop Linux, server Linux, Cygwin su XP, lo chiami.

Come posso mantenere sincronizzata la mia configurazione della shell ( .bashrc , .vimrc ecc.) su tutte queste macchine usando gli strumenti limitati disponibili su tutte le piattaforme?

Sto usando rsync in un modo piuttosto limitato che implica la copia manuale di alcuni file quando ne ho bisogno, ma voglio un modo standard per impostare lo stesso ambiente di shell di base su tutte le mie macchine . Dimmi la tua strategia di gestione dell'account shell.

È stato utile?

Soluzione

Ho una cartella su Dropbox con configurazioni di shell globali, per sistema operativo e per macchina:

$ ls ~/Dropbox/shell/bash
bashbootstrap  bashrc
bashrc-Darwin  bashrc-Darwin-laptopname  bashrc-Darwin-mininame
bashrc-Linux  bashrc-Linux-machineone  bashrc-Linux-machinetwo

bashrc viene caricato su ogni macchina, bashrc-Linux , bashrc-Darwin vengono caricati sui rispettivi sistemi operativi e diverse configurazioni sono specifiche alle singole macchine. (A proposito, Darwin è il nome del kernel simile a BSD di OS X.)

Ciò che lega tutto è il file bashbootstrap . Carica ogni file di configurazione applicabile in ordine di specificità crescente, ciò consente a priorità del sistema operativo e delle sostituzioni di macchine. Inoltre, saltiamo silenziosamente i file di configurazione mancanti; non è necessario creare file di configurazione vuoti per ciascuna macchina per rendere felice lo script.

Su una nuova macchina, dopo aver installato Dropbox su ~ / Dropbox , sposto il .bashrc predefinito e invece faccio semplicemente il link simbolico al suo posto:

$ mv ~/.bashrc ~/.bashrc.bak
$ ln -s ~/Dropbox/shell/bash/bashbootstrap  ~/.bashrc

Oh, e qui ci sono i contenuti del file 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"

Un'ultima nota, questo script fornisce anche tre alias utili per la modifica dei file di configurazione di Bash senza dover ricordare dove sono memorizzati.

  • editbashrc : modifica il file di configurazione globale.
  • editosbashrc : modifica il file di configurazione specifico del sistema operativo.
  • editlocalbashrc : modifica il file di configurazione specifico della macchina.

L'ho provato solo su Bash, ma potrebbe funzionare su altri Bash come shell. Ma, come si suol dire, il tuo chilometraggio può variare.

Ho pubblicato un post sul blog su questo qui .

Altri suggerimenti

Ho usato il controllo della versione per questo in passato ( svn , mercurial , ecc ...). Puoi configurare il tuo server o utilizzarne uno ospitato. Dropbox funziona anche.

Se hai accesso al controllo del codice sorgente, li farei semplicemente il check-in. In questo modo puoi sincronizzarli su più macchine e puoi confrontare / ripristinare se necessario. Se non hai CVS / SVN al lavoro, sono disponibili opzioni gratuite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top