在RubyGem中,是否可以用其他语言编写可执行文件?

在RubyGem中,是否可以用其他语言编写可执行文件?,ruby,rubygems,Ruby,Rubygems,我有一个gem,它在bin/中有一个可执行文件。在gemspec中使用通配符: s.executables = Dir["bin/*"].map &File.method(:basename) 如果我在bin/my_file中有一个ruby文件,它运行了chmoda+x,那么它可以在bash中的路径中找到: #!/usr/bin/env ruby puts "working ruby script" 但是,我在bin/my_file.coffee中有另一个用coffeescript编

我有一个gem,它在
bin/
中有一个可执行文件。在gemspec中使用通配符:

s.executables = Dir["bin/*"].map &File.method(:basename)
如果我在
bin/my_file
中有一个ruby文件,它运行了
chmoda+x
,那么它可以在bash中的路径中找到:

#!/usr/bin/env ruby
puts "working ruby script"
但是,我在
bin/my_file.coffee中有另一个用coffeescript编写的可执行文件:

#!/usr/bin/env coffee
console.dir "printing from coffee file"
当我在shell中运行
my_file.coffee
时,它会尝试使用ruby而不是coffeescript读取此脚本

如何按预期使用coffeescript运行此可执行文件

目前,我正在使用一种变通方法,即在ruby应用程序中将我的咖啡代码包装为字符串,然后将其传递给
coffee-e
,并捕获输出

另外,看看官方的解释:

RubyGems并不支持任意可执行文件

嗯。那么除了在herdoc中包装代码之外,还有其他选择吗


有没有一个很好的理由来解释这个限制?

我想这仅仅是RubyGems规范中的一个问题:


你如何运行你的咖啡文件?如果您使用
bundle exec
它当然会使用ruby。
当我在shell中运行我的_file.coffee时,它会尝试使用ruby而不是coffeescript读取此脚本。
这没有意义。当您在bin中时,
my_file.coffee
具有
u+x
并且您运行
/my_file.coffee
,会发生什么?你的问题意味着Linux shell在执行过程中完全忽略了可执行文件顶部的shebang,这让我很难相信(类似于@EricDuminil所说的)。我想这里缺少一些信息。@marianseen我没有使用bundle exec。该文件位于
bin/test.coffee
中,在我运行
gem install
之后,正如预期的那样,它位于我的路径中,我可以在shell中说
test.coffee
。@EricDuminil Ruby gems有一种发送可执行文件的方法,但除了Ruby之外,其他语言似乎不支持它。当我像
/my_file.coffee
那样运行它时,它确实可以工作。但在分发gem时,使用相对路径是不起作用的。
+  # Executables included may only be ruby scripts, not scripts for other
+  # languages or compiled binaries.
+  #