2018-07-08
平时我需要使用多台设备,每台设备都有各自的 terminal,因此我需要对它们的设置文件进行统一管理。
首先需要建一个 Git 仓库。我使用 GitLab 建了一个私有仓库。
最终我选择使用 .bash_profile。
同的系统有一些特定的设置。如何进行判断呢?
通过 How to detect the OS from a Bash script? ,得到以下代码:
if [[ "$OSTYPE" == "linux-gnu" ]]; then # ... elif [[ "$OSTYPE" == "darwin"* ]]; then # Mac OSX elif [[ "$OSTYPE" == "cygwin" ]]; then # POSIX compatibility layer and Linux environment emulation for Windows elif [[ "$OSTYPE" == "msys" ]]; then # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) elif [[ "$OSTYPE" == "win32" ]]; then # I'm not sure this can happen. elif [[ "$OSTYPE" == "freebsd"* ]]; then # ... else # Unknown. fi
这个能满足我的需要。我有三个主要的平台:
这样共性和特性的都解决了。
.bash_profile 的具体编写根据自己需要来写。
Emacs 是我在 terminal 下常用的编辑器,因此它的配置也需要同步。
Emacs 遇到一个问题,就是安装的包怎么做到多设备同步?
不能说每次一个新设备,都要手动打开 Emacs 一个个把它们装回来,那就太累了。
我希望的是,第一次打开 Emacs 的时候,它能够自动上 Melpa 上面下载缺少的包。
通过 What’s the best way to sync emacs settings between machines? 这一篇,我学习到 use-package 这个插件,能够满足我的要求。
Git 仓库中的配置脚本都写好后,下面要写链接脚本。
每次在新设备上,只要执行一次链接脚本,就能自动配置完成。
主要参考以下脚本:
#! /bin/sh SCRIPT_DIR=\`pwd\` declare -a FILES=( ".bash_profile" ".emacs" ) echo "Goto home $HOME" cd $HOME for FILE in "\${FILES[@]}"; do f="$SCRIPT_DIR/$FILE" echo "File = $f" ln -s $f done echo "Install Finish"
参考来源:Managing user configuration files across multiple computers