3

我需要检查一个特定的文件,看看它是否是世界可写的。在 1.9.x 中,有一个方便的检查 this,但这个检查在 1.8.7 中不存在。出于兼容性原因,我需要在 1.8.7 中编写此脚本。

在 1.8.7 中是否有一种很好的方法可以在我遗漏的情况下进行此检查,或者我是否需要使用 stat 滚动我自己的方法?

编辑 这是我到目前为止想出的。有点hacky和坏,但它有效:

def world_writable?(file)
  write_bit = Integer(sprintf("%o", File.stat(file).mode)[-1,1])
  if [2, 3, 6, 7].include?(write_bit)
    return true
  else
    return false
  end
end

if world_writable?('/Users/nate/Desktop/scriptrunnertest/test1.sh')
  puts "World writable"
else
  puts "Not World Writable"
end

我对红宝石很陌生,所以要温柔。

edit2没关系,这甚至不起作用。

edit3修复了它

4

1 回答 1

3

您可以获取stat文件的对象,并检查其mode成员...

world_writable = File.stat("testfile").mode == 0x100777

您应该可以将其添加到File...

class File
    def self.world_writable? path
        permissions = File.stat(path).mode
        permissions == 0x100777 && permissions || nil
    end
end

红宝石小提琴

于 2012-09-29T13:29:22.253 回答