2010-02-22 132 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新创建的文件。