排除一个奇怪的问题,但是:如何创建一个可以在#中使用的包装器shell脚本?其他脚本中的行。
wrap.sh
#!/bin/bash
set -e
echo "wrapper!"
exec ruby "$@"
test.rb
#!/usr/bin/env wrap.sh
puts RUBY_VERSION
puts "the ducks come from the trucks"
wrap.sh在路径中,test.rb标记为可执行文件。
现在我做了:
./test.rb
wrapper!
ruby: no Ruby script found in input (LoadError)
目标是通过包装器执行ruby脚本(ruby版本可以是本地版本,也可以来自随应用程序一起提供的旅行ruby安装)。
据我所知,ruby被调用,它只是对#不满意!在test.rb中并拒绝运行脚本。我无法删除#!因为这首先是脚本的执行方式
有没有解决方法?
所以,我不能使用rbenv / rvm / etc。包装器中的逻辑比这更多,但这是它的要点。
答案 0 :(得分:0)
在我看来,这些参数没有在"$@"
中传递给Ruby。我不认为爆炸哈希线是问题。
我的脚本中没有看到任何实际将test.rb的内容传递给wrapper.sh的内容,这是一个更大的问题。
也许真正的问题可以通过其他方式解决?例如,在从命令行调用任何Ruby脚本之前,您是否尝试解决以运行任意命令的问题?也许它可以这样接近......
答案 1 :(得分:0)
看起来Ruby只是检查hash-bang行包含“ruby”:https://github.com/ruby/ruby/blob/v2_2_2/ruby.c#L1580所以基本上在#中的某处有ruby!就行了。