Mantenere sincronizzate le configurazioni della shell su più macchine
-
03-07-2019 - |
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.
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
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.