2008-10-20 47 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,则有免费选项。