
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 関数を関数としてシェルにロードしようとすると、機能せず、Ruby がインストールされません。次のように、関数をシェルにロードする他の方法を試しました。
ルートインストールからスクリプトファイルを手動で取得する
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
シェルを閉じて再度ログインすると、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 スクリプトの経験がありません :\ 問題は私のシェルがサポートされていないことだと思いますが、誰か明確に説明できますか?
答え1
自分の質問に答えてるよ(笑)
最初の行を切り替えるだけです
#!/bin/sh
に
#!/bin/bash
私のスクリプトでは、抱えていた問題が解決しました。ソース化しようとしていたスクリプトが sh をサポートしていないことがわかりました。