실행 파일 내에서 shebang을 사용하여 환경을 지정할 수 있습니다.
#!/usr/bin/env ruby
# ruby code here
하지만 가능한 여러 환경을 지정하려면 어떻게 해야 할까요? 예를 들어, 여러 버전의 Ruby가 설치되어 있는 경우 다음과 같은 작업을 수행할 수 있습니다.
#!/path/to/better/ruby/version
#!/path/to/alternative/ruby/version
# ruby code here
단일 실행 파일에 대해 가능한 여러 환경을 지정하는 방법은 무엇입니까?
답변1
짧은 대답은 할 수 없다는 것입니다.
#!/usr/bin/env ruby
단순 대신 사용의 기본 아이디어 #!/usr/bin/ruby
는 사용자 경로에서 첫 번째 Ruby 바이너리를 사용하는 것입니다. 글쎄요, 여러분의 스크립트는 루비가 모든 시스템에서 동일한 위치에 있는 것에 의존하지 않습니다. 결국 "일반적인" 루비 위치는 ,,, /usr/bin/ruby
등이 될 수 있습니다./usr/local/bin/ruby
/opt/ruby-1.8.7/bin/ruby
일부 값을 하드코딩하거나 일부 검색 논리를 수행하려는 경우 언제든지 래퍼 셸 스크립트를 만들 수 있습니다.
#!/bin/sh
for ruby in /usr/bin/ruby /usr/local/bin/ruby
do
if [ -x "$ruby" ]
then
"$ruby" myscript.rb
break
fi
done
동기가 충분하다면 할 수도 있습니다.Ruby (또는 기타) 스크립트 삽입쉘 스크립트 내부.
답변2
나는 mrb에 반박하고 당신이 대안을 할 수 있다고 말할 것입니다.아니요"#!" 줄을 변경하세요.
#!/usr/bin/env ruby
첫 번째 줄이 포함된 Ruby 스크립트가 있다고 가정해 보겠습니다 .
스크립트를 실행 하려면 /path/to/better/ruby/version/whatever
먼저 PATH 환경 변수를 설정하십시오 /path/to/better/ruby/version
.
PATH=/path/to/better/ruby/version:$PATH whatever_script_name_is
/usr/local/bin/ruby
스크립트를 실행 하시겠습니까 ? PATH를 적절하게 설정하십시오.
PATH=/usr/local/bin:$PATH whatever_script_name_is
스크립트를 실행하려는 Ruby 실행 파일이 PATH와 동일한 디렉터리에 있는 경우 PATH를 조작하면 다른 문제가 발생할 수 있습니다.다른대체 프로그램. 예를 들어 BSD , , , 그중에 가 /usr/local/bin
있는 경우 이를 설정하면 Linux 실행 파일 대신 BSD 실행 파일이 제공됩니다. 이로 인해 문제가 발생할 수 있습니다.cat
grep
sed
ruby
PATH=/usr/local/bin:$PATH