2010-02-22 27 views
12

मैं एक पर्ल स्क्रिप्ट लिख रहा हूं जो बैश स्क्रिप्ट उत्पन्न करता है। मैं open() का उपयोग कर रहा हूं > के एक मोड के साथ सब कुछ आउटपुट करने के लिए। स्टैंडर्ड सामान:मैं पर्ल से फ़ाइल अनुमतियां कैसे सेट कर सकता हूं?

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

परिणामी .sh फ़ाइल perldoc में यह मैं एक +> (open (FILEOUT, "+>", "rename.sh")) को जोड़ सकते हैं नई बनाई गई फ़ाइल पठनीय और लिखने योग्य बनाने के लिए कहते हैं 444. की एक अष्टाधारी मूल्य के साथ ही पढ़ा जाता है, या 666.

क्या open() का उपयोग कर नई फ़ाइल निष्पादन योग्य (755 या कुछ और) बनाने का कोई तरीका है? यदि नहीं, तो नई फ़ाइल के लिए फ़ाइल अनुमतियां सेट करने का सबसे अच्छा तरीका क्या है?

+0

वास्तव में यह नहीं है कि '+> क्या करता है। इसमें फ़ाइल की अनुमतियों के साथ कुछ भी नहीं है और इसके बजाय 'ओपन' द्वारा बनाए गए फ़ाइलहेडल के एक्सेस मोड को प्रभावित करता है। – darch

उत्तर

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

+1

और अग्रणी' 0' को न भूलें; 'chmod 755, $ filename'' chmod 01363 $ filename' –

+0

@Andrew के बराबर है, यह केवल तभी काम करता है जब 'उमास्क' '2222' का उप-समूह है। – ikegami

1

< की + सामने लाना या > तुम दोनों पढ़ने और लिखने मोड में फ़ाइल खोलने के लिए अनुमति देता है।

आपके मामले में आप नई बनाई गई फ़ाइल chmod कर सकते हैं।

संबंधित मुद्दे