2014-09-19 39 views
3

當我打電話make_path(從核心File::Path模塊,提供一個模式,創建的目錄沒有我要求的模式:make_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/ 

回答

1

我錯過了這個細節make_path文檔中:

月de:數字權限模式適用於每個創建的目錄 (默認爲0777),將由當前的umask修改。

我並不期待這個,因爲相當於外殼(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選項,這可能是更方便的方式來設置創建目錄的模式。

+0

只要使用chmod,如果這就是你想要的。 – 2017-11-17 06:20:22

1

而不是將目錄的權限設置爲0。嘗試改爲使用chmod選項來File::Path::make_path

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

該chmod選項已添加到perl 5.24中。當我有這個問題時,它不存在。 – harmic 2017-11-17 23:16:32