在多台机器上保持 shell 配置同步
-
03-07-2019 - |
题
我是一个非常活跃的命令行用户,并且我到处都有 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)上运行。但是,正如他们所说,您的里程可能会有所不同。
我写了一篇关于这个的博客文章 这里.