在安装脚本中检测失败

我写了一个安装脚本来安装我的首选程序和设置后,我有一个新的服务器。

apt-get install git git clone http://[email protected] .vim ln -s .vimrc .vim/vimrc ... 

但是如果在安装过程中发生错误,我怎么能打断安装脚本,并logging错误? 例如,如果github服务器closures了,创build一个到不存在的vimrc的符号链接显然是没有用的。

(或者你有更好的方法来初始化服务器?)

在基本级别上,您可以执行诸如将STDERRredirect到文本文件来logging错误

git clone http://[email protected] .vim 2>> ~/logs/vim-error.txt

或者在这个特定的例子中,你可以做一个if语句

 if [ -f .vimrc ] ## -f means "if file exists" then ln -s .vimrc .vim/vimrc fi 

或者在git clone命令之后,你可以检查它的退出状态,如果不是0,退出脚本

 if [ $? -ne 0 ] then exit 1 fi 

我所有的脚本都是n00b级别的脚本,我发现这些东西通常会做我需要他们做的事情。

当然,那是我使用的方法。 然而,你所寻求的原则是贱民和容忍,这是剧本不应该搞乱,可以优雅地降低。 为了创build链接,testing文件是否像先前那样存在;

 [ -s .vimrc ] && ln -s .vimrc .vim/vimrc 

但是它也方便地检查链接是否已经存在; (即跳过,如果存在)

 [ -s .vimrc ] && [ ! -L .vim/vimrc ] && ln -s .vimrc .vim/vimrc 

基本上说,检查文件是否存在,它是否为非零,然后只创build链接,如果它不存在。 本手册中介绍的bash支持很多文件testing

通常也有这些快捷版本,但我不妨先告诉你完整版本…

典型的,它首先运行apt-get update ,刷新软件包列表…

显然,如果安装了git,就没有意义了(尽pipe你可能想升级它

 dpkg -l git >/dev/null || apt-get -q -y install git 

如果你只是想要最新的版本,不pipe怎么样,如果有一个可用的testing和apt都不会升级;

  apt-get -q -y install git 

我倾向于在安装脚本中使用完整path,只是为了提醒自己,并确保它不会做任何愚蠢的事情。 例如

  #explicitly set the full path somewhere HOME=/home/tomh #and then double check, partcular if you are about to do something descructive [ "$HOME" == "" ] && exit 99 [ -s $HOME/.vimrc ] && ln -s $HOME/.vimrc $HOME/.vim/vimrc 

为了从git获取文件,我会为这样的事情拍摄;

if [ ! -d $HOME/.vim ]; then
cd $HOME
git clone http://[email protected] .vim
else
cd $HOME/.vim
git pull
fi

检查之前,你使用,我没有testing它

厨师,特别是厨师独奏 。 可能是一些前期设置,但一旦你有你的食谱到位,新的机器设置基本上是枚举服务器的run_list。