在 CentOS 6.2 上的 bash 脚本中使用 rvm

在 CentOS 6.2 上的 bash 脚本中使用 rvm

我正在尝试编写一个脚本,该脚本确实完成了在 CentOS 6.2 上安装和设置 graylog2 服务器和 Web 界面的所有步骤。以下是我遇到问题的部分:

curl -L get.rvm.io | bash -s stable
# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then

  # First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"

elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then

  # Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"

else

  printf "ERROR: An RVM installation was not found.\n"

fi

rvm install 1.9.3 --create
rvm use 1.9.3 --default

因此,当它尝试将 rvm 函数作为函数加载到 shell 中时,它将无法工作,从而导致无法安装 ruby​​。我尝试了将函数加载到 shell 中的其他方法,如下所示:

从根安装中手动获取脚本文件

source /usr/local/rvm/scripts/rvm

手动添加 PATH 环境变量以包含 rvm:

PATH=$PATH:/usr/local/rvm/bin
export PATH

手动调用rvm命令的路径

/usr/local/rvm/bin/rvm install 1.9.3 --create

来源 /etc/profile.d/rvm.sh

source /etc/profile.d/rvm.sh

请注意,如果我关闭 shell 并重新登录,rvm 可以正常加载,但我需要能够从此脚本中完成所有操作,而无需注销并重新登录。我也以 root 身份执行此操作。您可以查看我迄今为止编写的完整脚本这里

任何帮助都将受到赞赏。

编辑

添加脚本后set -x,尝试加载该函数时的输出如下:

+ [[ -s /root/.rvm/scripts/rvm ]]
+ [[ -s /usr/local/rvm/scripts/rvm ]]
+ source /usr/local/rvm/scripts/rvm
++ [[ :braceexpand:hashall:interactive-comments:posix:xtrace: =~ :posix: ]]
++ return 0
+ rvm install 1.9.3 --create
./rvm_test.sh: line 27: rvm: command not found
+ rvm use 1.9.3 --default
./rvm_test.sh: line 28: rvm: command not found

编辑2

我查看了 /usr/local/rvm/scripts/rvm 文件并在最开始发现了以下内容:

# Do not allow sourcing RVM in `sh` - it's not supported
# return 0 to exit from sourcing this script without breaking sh
[[ ":$SHELLOPTS:" =~ ":posix:" ]] && return 0 || true

所以我相信这是导致我的问题的原因,但我不确定。我没有编写 bash 脚本的经验:\ 所以我猜问题是我的 shell 不受支持(?) 有人能解释一下吗?

答案1

回答我自己的问题哈哈

只需切换第一行

#!/bin/sh

#!/bin/bash

在我的脚本中修复了我遇到的问题。我发现尝试获取的脚本不支持 sh。

相关内容