बिल्ली पुनर्निर्देशन


11

कहते हैं कि एक फ़ाइल abcवर्तमान निर्देशिका में मौजूद है और इसमें कुछ पाठ है। जब आप कमांड निष्पादित करते हैं:

cat abc > abc

फ़ाइल की सामग्री क्यों abcगायब हो जाती है?
कमांड इसमें टेक्स्ट को क्यों डिलीट करता है और फाइल एक खाली फाइल बन जाती है?



10
एक लेजर पॉइंटर बिल्ली पुनर्निर्देशन के लिए एक बहुत प्रभावी उपकरण है </ pun>
WBT

मेरी बिल्ली बहुत ही खराब तरीके से पुनर्निर्देशन का जवाब देती है ...
Ex Umbris

इस समस्या से बचने के लिए, मैं एक छोटी सी cat abc | dog abc
गोले का

एक अन्य विकल्प, यदि आप स्क्रीन पर आउटपुट को बुरा नहीं मानते हैं, तो इसका उपयोग करना है tee
एंड्रिया लज्जाज़ारो

जवाबों:


27

आदेश के कारण कि चीजें कैसे की जाती हैं।

जब तुम करोगे:

cat abc > abc

>उत्पादन पुनर्निर्देशन ऑपरेटर, शेल यह देखता है इसे का उपयोग काट-छांट मोड में फ़ाइल को खोलता है O_TRUNCके साथ झंडा open(2)यानी open("abc", O_TRUNC), इसलिए जो कुछ भी फाइल में नहीं था चला जाएगा। ध्यान दें, यह पुनर्निर्देशन catकमांड चलने से पहले पहले शेल द्वारा किया जाता है ।

इसलिए जब कमांड cat abcनिष्पादित होती है, तो फ़ाइल abcपहले से ही कम हो जाती है इसलिए catफ़ाइल खाली मिलेगी।


1
बिल्ली एबीसी >> एबीसी के बारे में क्या? फिर क्या होता है?
तुलसी कानोडिया

2
@ तुलसीकानोडिया - जो एक अनंत लूप का कारण बनता है। हर बार जब बिल्ली एक पंक्ति पढ़ती है, तो वह अगले पर जाने से पहले एक और जोड़ देती है।
user3490

3
यह पता लगाया और रोका गया है। इसके बजाय, पाठ cat: filename: input file is output file(जहां filenameफ़ाइल नाम आपने चुना है) पुराने स्टडआउट पर मुद्रित किया गया है।
UTF-8


5

को जोड़ना @ heemayl का जवाब है, अगर आप कोड अनुक्रम जिसमें चीजों को आप बस आदेश के शुरू में किसी भी पुनर्निर्देशन डाल सकते हो रही हैं के बारे में और अधिक स्पष्ट होना चाहता हूँ:

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