首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用net/ssh gem来了解包是否已安装?

如何使用net/ssh gem来了解包是否已安装?
EN

Stack Overflow用户
提问于 2014-02-10 23:47:43
回答 1查看 168关注 0票数 0

我正在尝试使用net/ssh gem在我的Test-Kitchen实例中查找已安装的包。我做了一个简单的食谱,重用了构建必备的食谱。

这是我的食谱:

代码语言:javascript
复制
node['my-cookbook']['packages'].each do |pkg|
  package pkg
end

这些是我的属性:

代码语言:javascript
复制
default['my-cookbook']['packages'] = %w[build-essential git bison]

这些是我对cucumber的特征定义的一些步骤。

代码语言:javascript
复制
When(/^I ask for (.*)$/) do |package|

  Net::SSH.start(@infrastructure['my-app'].ip,'vagrant', password: 'vagrant') do |ssh|
    @out = ssh.exec!("dpkg --get-selections | grep #{package}")
  end
end

Then(/^I should see (.*)$/) do |package_respond|
  puts @out
  @out.should match package_respond
end

当实例收敛时,安装了build-essential,并且cucumber测试成功。

输出

代码语言:javascript
复制
puts @out

曾经是

代码语言:javascript
复制
grep: build-essential: No such file or directory

测试是成功的,因为表达匹配。我正期待着

代码语言:javascript
复制
build-essential             install

这里发生何事??如果没有安装程序包,控制台将以空字符串响应。

如何使用net/ssh gem检查特定的包是否已安装到我的厨房实例中?

我的kithen实例是ubuntu 12.04。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-05-06 09:31:15

我猜在一些包中有一个空间,或者类似的东西。

如果是这样的话,build-essential将作为grep的第二个参数出现,在这种情况下,grep将尝试将其作为一个文件打开,而这个文件当然不存在。

因此,我建议:

@out = ssh.exec!("dpkg --get-selections | grep \"#{package}\"")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21681642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档