Ruby FileUtils mkdir_p模式 - 意外结果

Gre*_*uhl 5 ruby

我正在尝试使用该:mode选项FileUtils.mkdir_p.但是,我使用Ruby 2.1.0获得了意想不到的结果.

require 'fileutils'
FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 2750
Run Code Online (Sandbox Code Playgroud)

结果:

d-wSrwxrwT  2 myuid users   4096 Mar 24 10:14 tmp
Run Code Online (Sandbox Code Playgroud)

但是,如果我只用反引号调用shell命令,我会得到所需的结果:

`mkdir /this/is/my/full/path/tmp && chmod 2750 /this/is/my/full/path/tmp`
Run Code Online (Sandbox Code Playgroud)

结果:

drwxr-s---  2 myuid users   4096 Mar 24 10:16 tmp
Run Code Online (Sandbox Code Playgroud)

如何在不使用shell命令的情况下创建具有所需权限的目录?

xrd*_*xrd 5

Ruby将权限解释为整数而不是八进制数.chmod命令(以及传递给的选项mkdir_p)采用八进制(或等价的整数).如果你在数字前加0,Ruby会将它用作八进制数.

FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 02750

或者,您可以使用整数(ruby -e 'puts 02750.to_i'显示1512).

FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 1512

  • @GregRuhl在shell中假设Octal是因为`chmod`是手动解释一个字符串,因为在mkdir_p`看到`:mode`选项的值之前,四个字符`2750`被转换为Fixnum,因此在Ruby中不会假设八进制. (2认同)