2016-06-08 153 views
-3

我有一个ruby字符串数组值,我想将它作为字符串值。我使用红宝石与厨师食谱。在Windows平台上运行。代码 -Ruby将字符串数组转换为字符串

version_string = Mixlib::ShellOut.new('some.exe -version').run_command  
Log.info(version.stdout.to_s)  
extract_var = version_string.stdout.to_s.lines.grep(/ver/) 
Log.info('version:'+ extract_var.to_s) 

输出coming-

version   530  
[2016-06-08T07:03:49+00:00] INFO: version ["version    530\r\n"] 

我想只提取530串。

+0

你想字符串值或整数? – Ilya

+0

嗨@llya我已更新完整的代码。请考虑一下。 –

+0

您是否看到[我的回答](http://stackoverflow.com/a/37610826/477037)最后一个问题? – Stefan

回答

2

当你想val = 720而不是val = "720"你可以写

val = strvar.first.to_i 
    #=> 720 
+0

Hi @ cary-swoveland我已经更新了详细的问题。请考虑一下。 –

+0

这解决了我的目的。 –

3

很长一段时间以来腐:)

没有看到你可以使用一些厨师的辅助方法和正则表达式,使这个更容易一些。

output = shell_out!('saphostexec.exe -version', cwd: 'C:\\Program Files\\hostctrl\\exe').stdout 
if output =~ /kernel release\s+(\d+)/ 
    kernel_version = $1 
else 
    raise "unable to parse kernel version" 
end 
Chef::Log.info(kernel_version) 
+0

是的。不知何故,shell_out在windows系统中不起作用。不知道是否需要包含任何库。 –

+0

这取决于你的厨师版本,你可以使用'include Chef :: Mixin :: ShellOut',但这已经在新版本中为你完成了。 – coderanger

+0

当然诺亚。我会尝试更新结果。 –

0

可以返回的第一个系列的数字发现作为一个整数从current_kernelString#[regexp]

current_kernel[/\d+/].to_i 
    #=> 720