Bru*_*uce 1 ruby shebang environment-variables
我使用的是Mac OS X.我安装了两个版本(2.1.5和2.0.0)的Ruby.前者安装在/another/.path/to/ruby(在"路径"之前有一个点,以模仿路径中包含一个点头目录的事实),以及默认的系统(版本2.0). 0)在/ usr/bin/ruby.我用rbenv来安装Ruby.
手动设置PATH环境变量后,将在另一个目录中找到默认的ruby命令:/another/.path/to/ruby.现在我查一下
which -a ruby
Run Code Online (Sandbox Code Playgroud)
它首先使用正确的ruby作为输出.
/another/.path/to/ruby
/usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)
现在我创建一个脚本rbs,其中shebang的第一行指定要使用的ruby.
#!/usr/bin/env ruby
puts 'hey there'
Run Code Online (Sandbox Code Playgroud)
然后我跑了
./rbs
Run Code Online (Sandbox Code Playgroud)
它输出'嘿那里'.好.同时,Ruby正在使用正确的版本.
/usr/bin/env ruby --version
Run Code Online (Sandbox Code Playgroud)
以及
ruby --version
Run Code Online (Sandbox Code Playgroud)
两者输出2.1.5.所以使用新版本确实很棒.
但是,这里出现问题:现在我将rbs文件更新为:
#!/another/.path/to/ruby
puts 'hey there'
Run Code Online (Sandbox Code Playgroud)
请注意,我更新了shebang以使用所需红宝石的绝对路径.然后我跑了
./rbs
Run Code Online (Sandbox Code Playgroud)
它输出:
./rbs: line 2: puts: command not found
Run Code Online (Sandbox Code Playgroud)
这太奇怪了;
但如果我跑
ruby ./rbs
Run Code Online (Sandbox Code Playgroud)
它输出'嘿那里'正常.看起来shebang使用/ usr/bin/env ruby是完美的,但不是新安装的ruby的绝对路径?
为什么是这样?有没有办法解决它,以便通过键入以下更新的脚本仍然可以工作?
./rbs
Run Code Online (Sandbox Code Playgroud)
谢谢!
该puts: command not found消息表明您的脚本不是由Ruby运行,而是由shell运行.首先,我会仔细检查你的shebang line的语法和路径.
其次,请注意rbenv使用动态查找和运行正确版本ruby(以及相关程序gem等)的填充程序.但垫片是脚本,脚本本身不是shebang口译员 ; 你必须找到并使用ruby可执行文件的实际路径(作为输出rbenv which ruby).
另一方面,既然/usr/bin/env 是可执行文件,你总是可以使用类似的东西#!/usr/bin/env ruby,即使ruby它在路径中找到它本身就是一个脚本也能工作.
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |