उसी फ़ाइल पर पुनर्निर्देशन फ़ाइल को छोटा क्यों करता है?


11

आम तौर पर हम आउटपुट को रीडायरेक्ट करने के लिए एक अलग फाइल का उपयोग करते हैं।

उदाहरण के लिए :

cat < first > temp

इस कमांड में पहले की सामग्री मानक आउटपुट के बजाय अस्थायी पर पुनर्निर्देशित की जाती है।

फिर अगर मैं उसी फ़ाइल नाम का उपयोग करता हूं तो यह फ़ाइल को छोटा क्यों करता है?

यह उसी फ़ाइल को अधिलेखित क्यों नहीं कर सकता है?

cat < first > first 

जवाबों:


19

जब आप I / O पुनर्निर्देशन का उपयोग करते हैं, तो कमांड निष्पादित होने से पहले "इनपुट" और "आउटपुट" दोनों फ़ाइल शेल द्वारा खोले जाते हैं । और ओवरराइटिंग के लिए फाइल खोलना, लिखने से पहले उसे रौंदने जैसा है। परिणाम: catइनपुट पर एक खाली फ़ाइल देखता है ...


0

क्योंकि सामान्य मामले में इसे संभालना बहुत जटिल होगा। बस निम्नलिखित उदाहरण पर विचार करें:

एक प्रोग्राम लाइन द्वारा एक फाइल लाइन पढ़ता है और प्रत्येक लाइन को दो बार आउटपुट करता है। अब इसके लिए दूसरी फाइल के बिना काम करने के लिए (यानी उसी फाइल पर) प्रोग्राम को उन लाइनों के सबसे (सभी) बफर करने की आवश्यकता होगी जो इसे पढ़ेंगे, क्योंकि वे पढ़े जाने से पहले ही अलग हो जाएंगे।

मामलों को रखने के लिए साधारण प्रोग्राम आमतौर पर एक माध्यमिक, अस्थायी फ़ाइल का उपयोग करते हैं, जिसे वे समाप्त होने के बाद मूल पर स्थानांतरित करते हैं। यह उदाहरण के लिए है कि sed -i(इनलाइन) कैसे काम करता है।


0

आमतौर पर इस मामले में पुनर्निर्देशन के लिए वाक्यविन्यास होना चाहिए cat first > temp। इसका मतलब है कि catके आउटपुट firstको फ़ाइल में भेजा जाता है temp। आपके कथन के मामले में cat < first > temp, आउटपुट catको उस समय पूरा नहीं किया गया है जब इसे फिर से आउट करने के लिए पुनर्निर्देशित किया गया हो। कुछ नहीं में परिणाम में कुछ भी नहीं है।

हालाँकि cat, एक फाइल को आईएनजी और दूसरी फाइल पर रीडायरेक्ट किया गया आउटपुट बेसिक से अलग नहीं है cp


cat < first > tempठीक काम करता है।
जनक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.