대체 스크립트 인터프리터(shebang)를 지정하는 방법은 무엇입니까?

대체 스크립트 인터프리터(shebang)를 지정하는 방법은 무엇입니까?

실행 파일 내에서 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 실행 파일이 제공됩니다. 이로 인해 문제가 발생할 수 있습니다.catgrepsedrubyPATH=/usr/local/bin:$PATH

관련 정보