您如何指定替代脚本解释器(shebangs)?

sff*_*ffc 9 ruby env

在可执行文件中,您使用 shebang 指定环境:

#!/usr/bin/env ruby

# ruby code here
Run Code Online (Sandbox Code Playgroud)

但是如果你想指定多个可能的环境怎么办?例如,如果您安装了多个版本的 Ruby,您可能想要执行类似的操作

#!/path/to/better/ruby/version
#!/path/to/alternative/ruby/version

# ruby code here
Run Code Online (Sandbox Code Playgroud)

如何为单个可执行文件指定多个可能的环境?

mrb*_*mrb 7

简短的回答是你不能。

使用#!/usr/bin/env ruby而不是简单地背后的想法#!/usr/bin/ruby是使用用户路径中第一个出现的任何 ruby​​ 二进制文件。那么你的脚本不依赖于 ruby​​ 在每个系统上的相同位置;毕竟,一个“正常”的红宝石的位置可能是/usr/bin/ruby/usr/local/bin/ruby/opt/ruby-1.8.7/bin/ruby,等...

如果您确实想要对某些值进行硬编码或执行一些搜索逻辑,则始终可以制作一个包装器 shell 脚本:

#!/bin/sh

for ruby in /usr/bin/ruby /usr/local/bin/ruby
do
    if [ -x "$ruby" ]
    then
        "$ruby" myscript.rb
        break
    fi
done
Run Code Online (Sandbox Code Playgroud)

如果您有足够的动力,您甚至可以在 shell 脚本中嵌入一​​个 ruby​​(或其他)脚本。