1

我为 ruby​​ 编写了一个 bash 包装器,该包装器经过了各种设置步骤。

最基本的版本是,

   #!/bin/bash 
   #   ruby_wrapper.sh
   ruby

现在我希望能够像使用普通 ruby​​ 一样使用这个包装器!具体来说,我想创建一个使用这个“解释器”的 .rb 文件。

   #!/path/to/ruby_wrapper.sh
   #  my_file.rb
   puts "hello world"

所以我希望能够做$ ./my_file.rb而不是$ ruby_wrapper.sh my_file.rb

这可能吗?

文件声称它不是。

请注意,解释器本身可能不是解释器脚本。

但我不明白为什么不。有没有人有任何想法来解决这个问题?

4

1 回答 1

9

尝试使用/usr/bin/env. 执行 Ruby 脚本实际上是一种很好的做法,/usr/bin/env 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)。

于 2011-05-18T23:01:03.137 回答