我是一个非常活跃的命令行用户,并且我到处都有 shell 帐户。MacBook、Linux 台式机、Linux 服务器、XP 上的 Cygwin,应有尽有。

我如何保留我的 shell 配置(.bashrc, .vimrc 等)使用所有平台上可用的有限工具在所有这些机器上同步?

我一直在使用 rsync 以一种非常有限的方式,涉及在需要时手动复制一些文件,但我想要一种标准方法来在我的所有计算机上设置相同的基本 shell 环境。告诉我你的 shell 帐户管理策略。

有帮助吗?

解决方案

我在 Dropbox 上有一个文件夹,其中包含全局、每个操作系统和每个机器 shell 配置:

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

bashrc 被加载到每台机器上, bashrc-Linux, bashrc-Darwin 加载在各自的操作系统上,并且一些配置特定于各个机器。(顺便说一下,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)上运行。但是,正如他们所说,您的里程可能会有所不同。

我写了一篇关于这个的博客文章 这里.

其他提示

我过去曾使用版本控制( svn mercurial 等...)。您可以设置自己的服务器,也可以使用托管服务器。 Dropbox 也可以使用。

如果您有权访问源代码管理,我只需要检查它们。这样您就可以在多台计算机上同步它们,并且可以根据需要进行比较/回滚。如果您没有CVS / SVN,可以使用免费选项。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top