쉘 스크립트에서 RVM이 작동하지 않아 수정해야 했습니다.
무슨 일이에요
그래서 저번에 포트폴리오 사이트를 구축하다가 Jekyll을 사용하기로 결정했습니다.
내가 임대하는 서버는 RVM을 통해 Ruby를 실행할 수 있으므로 심볼릭 링크의 힘으로 서버에서 소스를 가져오고 거기에 정적 사이트를 구축하고(쉽게 수행할 수 있음) 서버에 안전하게 제공할 수 있습니다. 인터넷.
그러나 문제가 발생했습니다. 간단한 스크립트가 작동하지 않았습니다.
#/usr/bin/env bash
set -eu
rvm use 2.7.2
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.
흥미롭게도 터미널 프롬프트에서 사용하는 RVM은
/usr/local/rvm/bin/rvm
가 아니라 프로필의 일부로 삽입되는 셸 함수입니다.# Run type command directly from the shell prompt
$ type rvm
rvm is a function
(function gets printed out)
# shell script that contains `type rvm`
$ ./test.sh
rvm is /usr/local/rvm/bin/rvm
(NGL, 그들이 "RVM은 함수가 아니다..."라고 말했을 때 상당히 혼란스러웠습니다. 예를 들어 RVM이 함수일 가능성이 없는데 RVM을 함수로 사용하려고 했다고 불평하는 건가요? 아니요! RVM의 쉘 함수 버전이며
rvm
Ruby 인터프리터를 선택하는 함수여야 합니다.)프로필을 직접 소싱해야 합니다.
you must
source
the file provided by RVM . RVM이 존재할 수 있는 두 위치가 있을 수 있습니다.source "$HOME/.rvm/scripts/rvm" # $HOME installation
source "/usr/local/rvm/scripts/rvm" # System installation
그러나 그것은 트릭을 수행하지 못했습니다
분명히 RVM은 바인딩되지 않은 변수에 의존하므로
set -eu
로 스크립트를 실행하면 충돌이 발생합니다.#!/usr/bin/env bash
set -eu
source "/usr/local/rvm/scripts/rvm"
rvm use 2.7.2
/usr/local/rvm/scripts/functions/support: Line 182: _system_name: Unbound variable
따라서 모든 RVM 명령을 실행하는 동안 이러한 변수를 일시적으로 허용해야 합니다.
예제 작업 스크립트
#!/usr/bin/env bash
set +u # WTF: Avoid RVM crashing due to unbound variables
source "/usr/local/rvm/scripts/rvm"
rvm use 2.7.2
set -eu # Restore strict error checking
bundle install
JEKYLL_ENV=production bundle exec jekyll build
임의의 생각
Jenkins 트리거 쉘 스크립트에서
pyenv
를 사용하려고 시도하는 비슷한 문제가 있었던 것을 기억합니다... 비슷한 성격의 문제였을 수 있습니다.
Reference
이 문제에 관하여(쉘 스크립트에서 RVM이 작동하지 않아 수정해야 했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/clpsplug/rvm-did-not-work-in-the-shell-script-so-i-had-to-fix-it-2dko텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)