我为ruby编写了一个bash包装器,它经历了各种设置步骤。
最基本的版本是,
#!/bin/bash
# ruby_wrapper.sh
ruby
现在我希望能够像常规红宝石一样使用这个包装器!具体来说,我想创建一个使用这个“解释器”的.rb文件。
#!/path/to/ruby_wrapper.sh
# my_file.rb
puts "hello world"
所以我希望能够$ ./my_file.rb
代替$ ruby_wrapper.sh my_file.rb
这可能吗?
documentation声称不是。
请注意,解释器本身可能不是解释器脚本。
但我不明白为什么不。有没有人有任何想法来解决这个问题?
答案 0 :(得分:9)
尝试使用/usr/bin/env
调用您的包装器。使用/usr/bin/env ruby
执行Ruby脚本实际上是一种很好的做法,因为您不必对ruby
二进制文件的路径进行硬编码,因此这并非不自然。
$ cat ruby_wrapper.sh
#!/bin/bash
exec ruby "$@"
$ cat wrapped.rb
#!/usr/bin/env /tmp/ruby_wrapper.sh
puts "hello world"
$ ./wrapped.rb
hello world
另外作为旁注,请参阅我在包装器脚本中如何使用exec
。这将允许ruby解释器接管您的包装脚本的进程,而不是作为脚本的子进程运行。这使得包装器对调用者是透明的(例如,信号将被直接传递给ruby而不是bash)。