当我调用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/
答案 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 });'