make_path未设置指定的模式

时间:2014-09-19 01:16:40

标签: perl path permissions

当我调用make_path(来自核心File::Path模块,提供模式时,创建的目录没有我请求的模式:

$ perl -MFile::Path=make_path -e 'make_path("foobar", { mode=>0770 });'
$ ls -ld foobar/
drwxr-x--- 2 itk itkadm 4096 Sep 19 11:10 foobar/

我期待看到:

drwxrwx--- 2 itk itkadm 4096 Sep 19 11:07 foobar/

2 个答案:

答案 0 :(得分:1)

我在make_path文档中错过了这个细节:

  

mode:要应用于每个已创建目录的数字权限模式   (默认为0777),由当前的umask 修改。

我没想到这是因为shell等效(mkdir -m 0770 -p foobar)不考虑umask

这可以按预期工作:

$ perl -MFile::Path=make_path -e 'umask(0); make_path("foobar", { mode=>0770 });'
$ ls -ld foobar/
drwxrwx--- 2 itk itkadm 4096 Sep 19 11:13 foobar/

请注意umask(0)

正如Evan Carroll所指出的那样,File::Path版本更新的perl版本(> = 5.24)具有chmod选项,这可能是设置创建模式的更方便的方法目录。

答案 1 :(得分:1)

而不是将目录的权限设置为0。请尝试使用chmod

File::Path::make_path选项
perl -MFile::Path=make_path -e 'make_path("foobar", { chmod=>0770 });'