首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过shell脚本安装rbenv

通过shell脚本安装rbenv
EN

Stack Overflow用户
提问于 2016-12-13 14:59:24
回答 1查看 582关注 0票数 1

我已经创建了一个shell脚本来将rbenv安装到一个新的虚拟机上,但是似乎每个人都正常工作,但有时rbenv似乎无法安装。我想在整个过程中添加一些额外的错误检查,以确保安装发生,如果有什么问题,重新启动安装。

一些注意事项:

  • 这是较大脚本的一小部分。
  • 这都是通过whiptail对话框完成的。
  • 我将输出重定向到events.log文件>&$log_fd...

这就是我目前的情况:

代码语言:javascript
复制
set_rbenv(){
  # install rbenv
  RUBY_VERSION="2.1.4"
  RBENV_ROOT="/root/.rbenv"
  PROFILE="/root/.bashrc"

  # check if rbenv is installed
  if [[ ! `which rbenv` ]]; then

    if [[ ! -d "$RBENV_ROOT" ]]; then
      echo "Cloning rbenv..." >&$log_fd 2>&1
      git clone https://github.com/rbenv/rbenv.git $RBENV_ROOT >&$log_fd 2>&1
    fi

    if [[ ! -d "$RBENV_ROOT/plugins/ruby-build" ]]; then
      git clone https://github.com/rbenv/ruby-build.git $RBENV_ROOT/plugins/ruby-build >&$log_fd 2>&1
    fi

    if [[ ! `grep -e '/.rbenv\/bin' $PROFILE` ]]; then
      echo "rbenv not in PATH ... adding..." >&$log_fd 2>&1
      echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> $PROFILE 2>&1
    fi
    if [[ ! `grep -e '^\eval "$(rbenv init -)"' $PROFILE` ]]; then
      echo "rbenv init not in .bashrc... adding..." >&$log_fd 2>&1
      echo 'eval "$(rbenv init -)"' >> $PROFILE 2>&1
    fi
    . $PROFILE
    echo "Finished Installing rbenv..." >&$log_fd 2>&1
  else
    echo "rbenv already installed... skipping!" >&$log_fd 2>&1
  fi

  if [ ! -d "$RBENV_ROOT/versions" ]; then
    echo "$RBENV_ROOT/versions doesn't exist ... creating..."
    mkdir $RBENV_ROOT/versions >&$log_fd 2>&1
  fi

  if [ ! -d "$RBENV_ROOT/versions/$RUBY_VERSION" ]; then
    echo "$RBENV_ROOT/versions/$RUBY_VERSION doesn't exist ... creating..." >&$log_fd 2>&1
    mkdir $RBENV_ROOT/versions/$RBENV_VERSION >&$log_fd 2>&1
  fi

  # check if ruby version is installed
  if [[ ! `rbenv version | grep $RUBY_VERSION` ]]; then
    echo "installing ruby 2.1.4" >&$log_fd 2>&1
    rbenv install $RUBY_VERSION >&$log_fd 2>&1
    rbenv global $RUBY_VERSION >&$log_fd 2>&1

    if [ ! -d "$RBENV_ROOT/versions/$RUBY_VERSION/etc" ]; then
      echo "$RBENV_ROOT/versions/$RUBY_VERSION/etc doesn't exist ... creating..." >&$log_fd 2>&1
      mkdir $RBENV_ROOT/versions/$RUBY_VERSION/etc >&$log_fd 2>&1
    fi

  else
    echo "ruby $RUBY_VERSION already exists... skipping!" >&$log_fd 2>&1
  fi
  (( STATUS += 35 ))
  echo $STATUS
}

虽然安装本身在新VM上的任何时候都可能失败,但是如果rbenv安装,我就完了,但是没有其他的(如ruby-build)或$PATH等等。

在初始的if语句之外封装它自己的if which rbenv语句中的每个命令是否更有意义,还是有一种更健壮的方法来确保安装成功完成?

EN

回答 1

Stack Overflow用户

发布于 2016-12-13 16:27:46

实际上,您可以更容易地使用配置管理工具(如Ansible、P偶或Chef )来执行此任务。与其尝试指定“如何”检查和使用没完没了的IF语句,您还可以指定“检查什么”,并使用现有框架进行检查。

例如,在Ansible中,可以指定使用apt模块更新缓存&安装foo的最新版本:

代码语言:javascript
复制
- hosts: all
  remote_user: root
  tasks:
  - name: Install the package foo
    apt:
      name: foo
      state: present
      update_cache: yes

更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41124182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档