2008-10-20 63 views
8

我是一個非常活躍的命令行用戶,我在各地都有shell帳戶。 MacBooks,Linux桌面機器,Linux服務器,XP上的Cygwin,你的名字。保持外殼配置跨多臺機器同步

如何使用所有平臺上可用的有限工具來保持我的shell配置(.bashrc,.vimrc等)跨所有這些機器同步?

我一直以相當有限的方式使用rsync,涉及在需要時手動複製某些文件,但我想要一種標準方法來在所有機器上設置相同的基本shell環境。告訴我你的外殼賬戶管理策略。

回答

12

我有文件夾的Dropbox全球,每個操作系統和每臺機器外殼CONFIGS:

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

bashrc裝載每臺機器上,bashrc-Linuxbashrc-Darwin被裝載在各自的操作系統,和幾個CONFIGS特定到個人機器。 (順便說一下,Darwin是OS X的類似BSD的內核的名稱。)

這一切緊緊相關的是bashbootstrap文件。它按照特定的順序加載每個可用的配置文件,這允許每個操作系統和每臺機器覆蓋具有更高的優先級。另外,我們默默跳過丟失的配置文件;您無需爲每臺機器創建空配置文件來保持腳本的快樂。

在新機器上~/Dropbox安裝Dropbox的後,我搬開默認.bashrc,只是符號鏈接引導文件在其位置上,而不是:

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

哦,這裏是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" 

最後一個音符,這個腳本還提供了三種便利別名編輯Bash的配置文件,而不必記住它們的存儲位置。

  • editbashrc編輯全局配置文件。
  • editosbashrc編輯操作系統特定的配置文件。
  • editlocalbashrc編輯機器特定的配置文件。

我只在Bash上測試過它,但它可以在其他Bash上像shell一樣工作。但是,正如他們所說,你的里程可能會有所不同。

我發表了關於here的博客文章。

2

我在過去使用過版本控制(svn,mercurial等)。您可以設置自己的服務器,或使用託管的服務器。 Dropbox也有效。

0

如果您有權訪問源代碼管理,我只需檢查它們。這樣您就可以跨多臺機器同步它們,並且可以根據需要進行比較/回滾。如果您在工作時沒有CVS/SVN,則有免費選項。