进程抛出"Unexpected return"错误



我正在尝试创建一个Chef配方,该配方将从Role中读取属性,其中一个属性将包含需要在服务器上执行Bash代码。

因此,我创建了以下过程:

def proc_test(command)
proc = Proc.new { |command| command_out = Mixlib::ShellOut.new(command) ; command_out.run_command ; return command_out.stdout + command_out.stderr  }
proc.call(command)
end

当像这样运行时:

node.set['attributes']['nested_attribute'] = proc_test("hostname")

工程。但是,如果我尝试这样做:

command="hostname"
node.set['attributes']['nested_attribute'] = proc_test(command)

它会抛出此错误:

LocalJumpError
--------------
unexpected return

有人可以帮助我吗?

如果我不使用return关键字,而是使用put,则会出现相同的错误。

我不明白你为什么认为你需要一个Proc。只需使用正常的shell_out!帮助程序方法或bash资源。

问题是return不能从Ruby进程调用。只需跳过return即可避免错误:

def proc_test(command)
proc = Proc.new do |command|
command_out = Mixlib::ShellOut.new(command) 
command_out.run_command
command_out.stdout + command_out.stderr
end
proc.call(command)
end

相关内容

最新更新