gpt4 book ai didi

ruby - 通过 shell 脚本安装 rbenv

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:21 26 4
gpt4 key购买 nike

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

一些注意事项:

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

这是我目前拥有的:

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 which rbenv 之外的它自己的 if 语句中是否更有意义,或者是否有更稳健的方法来确保安装是否成功?

最佳答案

实际上,您可以使用 Ansible、puppet 或 Chef 等配置管理工具更轻松地执行此任务。您可以指定要检查的“内容”并使用现有框架来执行此操作,而不是尝试指定“如何”检查和使用无穷无尽的 IF 语句。

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

- hosts: all
remote_user: root
tasks:
- name: Install the package foo
apt:
name: foo
state: present
update_cache: yes

More information

关于ruby - 通过 shell 脚本安装 rbenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com