有点奇怪,但是:如何创建一个可以在#中使用的包装shell脚本呢其他脚本中的行。
包.sh
#!/bin/bash
set -e
echo "wrapper!"
exec ruby "$@"
测试.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被调用了,它只是对#不满意并拒绝运行脚本我无法移除#因为脚本就是这样执行的。
有解决办法吗?
所以,我不能使用rbenv/rvm/etc。包装器中的逻辑比这个多,但这是它的要点。
最佳答案
在我看来,这些参数并没有在"$@"
中传递给ruby。我不认为bang散列行是问题所在。
我在您的脚本中没有看到任何实际将test.rb的内容传递给wrapper.sh的内容,这是更大的问题。
也许真正的问题可以用其他方法解决例如,在从命令行调用任何Ruby脚本之前,您试图解决的问题是运行任意命令吗也许可以这样接近。。。