如何构建包装脚本

时间:2015-08-09 01:53:05

标签: ruby bash shell

排除一个奇怪的问题,但是:如何创建一个可以在#中使用的包装器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。包装器中的逻辑比这更多,但这是它的要点。

2 个答案:

答案 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!就行了。

相关问题