उपयोगकर्ता मेरी स्क्रिप्ट को एक फ़ाइल पथ के साथ कॉल करता है जिसे या तो स्क्रिप्ट में किसी बिंदु पर बनाया या अधिलेखित किया जाएगा, जैसे foo.sh file.txtया foo.sh dir/file.txt।
क्रिएट-या-ओवरराइट व्यवहार फ़ाइल को >आउटपुट रीडायरेक्ट ऑपरेटर के दाईं ओर रखने के लिए आवश्यकताओं की तरह है , या इसे एक तर्क के रूप में पारित कर रहा है tee(वास्तव में, इसे एक तर्क के रूप में पारित करना teeवास्तव में मैं क्या कर रहा हूं )।
इससे पहले कि मैं स्क्रिप्ट की चपेट में आऊं, मैं एक उचित जांच करना चाहता हूं कि क्या फाइल बनाई / अधिलेखित की जा सकती है, लेकिन वास्तव में इसे नहीं बनाया गया है। यह जाँच सही नहीं है, और हाँ मुझे एहसास है कि जाँच और बिंदु के बीच स्थिति बदल सकती है जहाँ फ़ाइल वास्तव में लिखी गई है - लेकिन यहाँ मैं एक सर्वोत्तम प्रयास प्रकार के समाधान के साथ ठीक हूँ ताकि मैं जल्दी से बाहर निकल सकूँ उस स्थिति में जब फ़ाइल पथ अमान्य है।
फ़ाइल नहीं बनाई जा सकी कारणों के उदाहरण:
- फ़ाइल में एक निर्देशिका घटक होता है,
dir/file.txtलेकिन निर्देशिकाdirमौजूद नहीं है - उपयोगकर्ता के पास निर्दिष्ट निर्देशिका में अनुमतियाँ नहीं हैं (या यदि कोई निर्देशिका निर्दिष्ट नहीं की गई है तो CWD)
हां, मुझे एहसास है कि चेकिंग अनुमतियाँ "अप फ्रंट" यूनिक्स तरीका ™ नहीं है , बल्कि मुझे बस ऑपरेशन की कोशिश करनी चाहिए और बाद में माफी मांगनी चाहिए। हालांकि मेरी विशेष स्क्रिप्ट में, यह एक खराब उपयोगकर्ता अनुभव की ओर जाता है और मैं जिम्मेदार घटक को नहीं बदल सकता।
/foo/bar/file.txt। मूल रूप से मैं कमांड लाइन पर जहां पारित किया जाता है tee, tee $OUT_FILEवहां पसंद करने के लिए रास्ता पास करता हूं OUT_FILE। यह दोनों पूर्ण और सापेक्ष पथ के साथ "बस काम" करना चाहिए, है ना?
tee -- "$OUT_FILE"कम से कम आवश्यकता होगी । क्या होगा यदि फ़ाइल पहले से मौजूद है या मौजूद है, लेकिन एक नियमित फ़ाइल (निर्देशिका, सिमलिंक, फिफो) नहीं है?
tee "${OUT_FILE}.tmp"। यदि फ़ाइल पहले से मौजूद है, तो teeअधिलेखित हो जाती है, जो इस मामले में वांछित व्यवहार है। यदि यह एक निर्देशिका है, teeतो असफल हो जाएगा (मुझे लगता है)। सिम्लिंक मैं 100% निश्चित नहीं हूं?