我为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

这可能吗?

文件编制 声称不是。

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

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

有帮助吗?

解决方案

尝试使用以下方法调用包装器 /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)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top