在Ruby中运行任何语言的脚本

时间:2015-06-11 06:16:44

标签: ruby-on-rails ruby bash shell scripting

我可以使用:

在Ruby中执行shell命令
needed_objects = YourModel.objects.filter(jsonfield__contains={"status": value2}).exclude(jsonfield__contains={"status": value1})

我还可以使用以下方法评估Ruby中的Ruby脚本:

def run(code)
    %x[ #{code} ]
end

有没有办法盲目执行/评估def run(code) eval(code) end 作为shell脚本,无论语言是什么?我想在code的开头加入#!/bin/bash#!/usr/bin/env ruby,但不确定如何形成字符串并调用它。

2 个答案:

答案 0 :(得分:1)

  

但不确定如何形成字符串并调用它。

您正在使用#!/bin/bash#!/usr/bin/env ruby指向用于解释代码的二进制文件,但我不确定您是否可以将代码作为字符串传递 - 您可能需要先将代码保存到临时文件中,然后运行它:

require 'tempfile'

code = "#!/bin/bash\necho 'hello world'"
interpreter = code.match(/#!(.*)/)[1]

file = Tempfile.new('foo')
file.write(code)
file.close
%x(#{interpreter} #{file.path})  # prints "hello world"

当然你也可以创建临时文件,将其标记为可执行文件(chmod),然后直接运行它。然后你的最后一步不需要指定的解释器:

%x(#{file.path})  # prints "hello world"

答案 1 :(得分:1)

添加shell命令ruby -e

%x["ruby -e " + code]