2015-11-19 20 views
0

我试图将文件从源复制到目标,但副本与fileutils.rb:1402:in初始化'失败:权限被拒绝@ rb_sysopen`。复制红宝石文件作为须藤用户

目标文件是由根,那里的脚本不同的本地用户下运行拥有。如何以sudo root身份执行复制?

这里是我当前的代码

FileUtils.cp("#{Dir.home}/.user.crt", "#{'/opt/vagrant/embedded/.user.crt'}") 
puts "Copied cert file" 

遇到错误

fileutils.rb:1402:in `initialize': Permission denied @ rb_sysopen - /opt/vagrant/embedded/.user.crt (Errno::EACCES) 
+2

您应该以访问这两个目录的用户身份运行脚本 – Oleander

回答

0

您可以使用the sudo gem给单个对象sudo访问。

require 'sudo' 
Sudo::Wrapper.run do |sudo| 
    sudo[FileUtils].cp("#{Dir.home}/.user.crt", '/opt/vagrant/embedded/.user.crt') 
end 

这比下提升的权限运行整个脚本更安全。

+0

感谢您的解决方案。 我试过这段代码,但我得到一个新的错误 /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in'require':can not load这样的文件 - sudo(LoadError) \t from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in'require' \t from configure-env1.rb 109:在'

“ – Alex

+0

@Alex那晦涩的消息意味着你没有[安装须藤宝石(http://guides.rubygems.org/rubygems-basics/)。 – Schwern

+1

我安装了sudo gem,现在一切正常。感谢您的解决方案。 – Alex