2010-02-22 14 views
12

Sto scrivendo uno script Perl che genera uno script Bash. Sto usando open() con una modalità di > per produrre tutto in un nuovo file. roba standard:Come posso impostare i permessi dei file da Perl?

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

Il file risultante .sh è di sola lettura, con un valore ottale di 444. In perldoc si dice che posso aggiungere una + al > (open (FILEOUT, "+>", "rename.sh")) per rendere il file appena creato lettura e scrittura, o 666.

C'è un modo per rendere il nuovo file eseguibile (755 o qualsiasi altra cosa) utilizzando open()? In caso contrario, qual è il modo migliore per impostare i permessi dei file per il nuovo file?

+0

Questo non è davvero ciò che fa '+>'. Non ha nulla con le autorizzazioni del file e influenza invece la modalità di accesso del filehandle creato da 'open'. – darch

risposta

17

Si vorrà il chmod il file come questo.

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

In alternativa, se si utilizza sysopen e impostare il umask in modo appropriato, si può fare senza chmod.

+0

Eccellente. Entrambe le opzioni funzionano alla grande. Ho ottenuto 'sysopen' per funzionare in questo modo:' usa Fcntl; sysopen (FILEOUT, "rename.sh", O_RDWR | O_EXCL | O_CREAT, 0755); ' – Andrew

+1

E non dimenticare l'iniziale' 0'; 'chmod 755, $ nomefile' equivale a' chmod 01363 $ nomefile' –

+0

@Andrew, Che funziona solo se 'umask' è un sottoinsieme di' 022'. – ikegami

1

L'immissione di + di fronte a < o > consente di aprire il file in modalità di lettura e scrittura.

Nel tuo caso è possibile chmod il file appena creato.

Problemi correlati