2011-12-05 32 views
3

在Unix/Linux系统上,chmod函数支持“符号模式”,这意味着您可以执行基本上具有权限的比特算术运算。 chmod u+x ...是为用户添加可执行权限的符号形式。 Ruby的FileUtils中的chmod函数仅支持绝对位掩码作为权限,即只能执行FileUtils.chmod(0777, ...),但FileUtils.chmod('u+x', ...)不起作用。在没有明确调用系统命令的情况下在Ruby中复制chmod的符号模式

我得到的一种方法是直接调用system命令:system("chmod u+x ..."),但我更愿意尽可能将代码保留在Ruby域中,而无需在任何地方产生shell。或者,我可以遍历File对象,File.stat这些对象,获取它们现有的位掩码并单独修改它们,但符号模式将支持文件glob,它更加简洁并且不易出错。

有谁知道是否有办法以更优雅的方式做到这一点?

回答

2

您使用的是哪个版本的Ruby?看看1.9.3 docs for FileUtils.chmod:对指定的文件(列表)

更改权限位模式下所代表的位 模式。模式是可以使用的符号和绝对模式 。绝对模式是

FileUtils.chmod 0755, 'somecommand' 
FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb) 
FileUtils.chmod 0755, '/usr/bin/ruby', :verbose => true 

符号模式是

FileUtils.chmod "u=wrx,go=rx", 'somecommand' 
FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb) 
FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true 
+0

我使用Ruby 1.8.7,所以我想这功能没有提供给我呢。 –

+0

是否有任何特定的东西阻止您更新?使用RVM或rbenv,安装其他Ruby版本并切换到每个应用程序基础上是相当麻烦的。 –

+0

我们目前的生产系统停留在Ubuntu Lucid上,它仍然在1.8(实际上甚至是最新版本,Oneiric,在Ruby 1.8上),Debian包装在手动升级Ruby时效果不佳。我曾考虑推动迁移到基于RVM的管理系统,但我们还没有。 –

相关问题