2010-02-22 129 views
12

我正在編寫一個生成Bash腳本的Perl腳本。我正在使用open()以及>模式將所有內容輸出到新文件。標準的東西:如何從Perl設置文件權限?

open (FILEOUT, ">", "rename.sh") or die "Can't create rename.sh"; 

所得.sh文件是隻讀的,隨着444的八進制值在的perldoc它說我可以添加一個+>open (FILEOUT, "+>", "rename.sh")),使新創建的文件讀寫,或666.

有沒有辦法使用open()來使新文件可執行(755或其他)?如果沒有,那麼爲新文件設置文件權限的最佳方法是什麼?

+0

這實際上不是''>''做的。它與文件的權限沒有任何關係,而是影響由'open'創建的文件句柄的訪問模式。 – darch 2013-05-07 20:22:00

回答

17

你會想要chmod這樣的文件。

chmod 0755, $filename; 
#or 
chmod 0755, $fh; 

另外,如果您使用sysopen並相應地設置umask,你可以不用搭配chmod。

+0

優秀。這兩個選項都很好。 我得到'sysopen'就像這樣工作:'使用Fcntl; sysopen(FILEOUT,「rename.sh」,O_RDWR | O_EXCL | O_CREAT,0755);' – Andrew 2010-02-22 13:01:16

+1

不要忘記領先的'0'; 'chmod 755,$ filename'相當於'chmod 01363 $ filename' – 2013-05-07 18:46:02

+0

@Andrew,這隻有在'umask'是'022'的一個子集時纔有效。 – ikegami 2015-08-14 11:44:35

1

+放在<>的前面可讓您以讀取和寫入模式打開文件。

在你的情況下,你可以chmod新創建的文件。