
저는 CentOS 6.2에서 greylog2 서버와 웹 인터페이스를 설치하고 설정하기 위한 모든 단계를 거치는 스크립트를 작성하려고 합니다. 제가 문제를 겪고 있는 부분은 다음과 같습니다.
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
rvm을 포함하도록 PATH 환경 변수를 수동으로 추가합니다.
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이 제대로 로드되지만 로그아웃했다가 다시 로그인할 필요 없이 이 스크립트 내에서 모든 작업을 수행할 수 있어야 합니다. 또한 이 작업을 수행하고 있습니다. 루트에서. 지금까지 제가 작성한 스크립트 전체를 보실 수 있습니다여기.
도움을 주시면 감사하겠습니다.
편집하다
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를 지원하지 않는다는 것을 알아냈습니다.