रीडायरेक्ट करने के दोनों तरीकों (> और >>) के बीच इस मामले में आपको जो मूल बात समझनी है, वह है:
>
जहाँ यह इंगित किया गया था उस जानकारी को रीडायरेक्ट करता है और अधिलेखित करता है। पाइप के माध्यम से कोई भी सूचना प्राप्त करते समय ऐसा होता है "|"
>>
सूचनाओं को पुनर्निर्देशित करता है और सूचित करता है। पाइप के माध्यम से कोई भी सूचना प्राप्त करते समय ऐसा होता है "|"
दोनों मामलों में यदि फ़ाइल मौजूद नहीं है, तो इसके बजाय इसे बनाया जाएगा। यदि आप इसे फिर से उसी फ़ाइल पर चलाते हैं, तो केवल ">>" जानकारी को संक्षिप्त किया जाएगा। ">" के साथ आप बस पहले रन पर जो कुछ भी करते हैं उसे ओवरराइट कर देंगे।
लेकिन यहां आउटपुट फ़ाइल के रूप में समान इनपुट फ़ाइल का उपयोग करते समय सौदा होता है। उस विशेष स्थिति में, यदि आप ">" का उपयोग करते हैं, तो आप पार्स करने के लिए "इनपुट" भाग की जानकारी को हटा देंगे, क्योंकि आउटपुट फाइल "इसे ओवरराइट कर देगी"। तो में:
rev file.txt | cat > file.txt
"धीमी गति स्पष्टीकरण" में वास्तव में क्या हो रहा है:
rev
की सामग्री को उलटने के लिए तैयार करता है file.txt
और इसे पाइप पर भेजता है
rev
पाइप को जानकारी भेजते समय , पाइप सीधे इसे स्ट्रीम करता है cat
।
cat
जानकारी प्राप्त करते समय यह स्वचालित रूप से उस पर लागू होगा जो file.txt
इसके साथ सेट किया गया था।
- यहां कीवर्ड "जबकि" है, क्योंकि सब कुछ एक ही समय में हो रहा है। कृपया एमिल द्वारा नीचे दिए गए उत्कृष्ट टिप्पणियों को इस भाग पर गहराई से समझने के लिए देखें।
cat
rev
पूरी फ़ाइल को पाइप करने के लिए प्रतीक्षा नहीं करेगा । यह बस मिनट शुरू कर देगा सूचना का पहला भाग इसे प्राप्त करता है, जिसका अर्थ है कि आपने किस प्रतीक का उपयोग किया है, इसके आधार पर यह एक कनेक्शन खोल देगा file.txt
।
- इस मामले के बाद से आप इस्तेमाल किया > बजाय >> , खोल आउटपुट फ़ाइल जिसका मतलब है कि यह खुल जाएगा काटना होगा और स्पष्ट की जानकारी
file.txt
नई जानकारी के लिए इंतज़ार कर इसे पाने के लिए करते हैं। >> इसके साथ यह एक कनेक्शन खोलेगा file.txt
और अंतिम पंक्ति की नई जानकारी की प्रतीक्षा करेगा।
- चूंकि जानकारी पहले से ही > के
file.txt
साथ साफ हो गई थी , इसलिए यह काम करने की कोशिश करेगा और नई जानकारी के लिए तैयारी में सब कुछ हटा देने के कारण कुछ भी नहीं मिलेगा ।rev
cat
तो ऊपर पढ़कर बाकी लोग क्यों काम करते हैं। होने के कारण:
rev file.txt | cat > file2.txt && mv file.txt file2.txt
यहां आप बिल्ली को पाइप कर रहे हैं जो किसी अन्य फ़ाइल को जानकारी भेज रही है । इस स्थिति में, संसाधित इनपुट फ़ाइल file.txt
आउटपुट फ़ाइल के समान नहीं है file2.txt
। उसके बाद आप शाब्दिक रूप से संपूर्ण के file2.txt
साथ ओवरराइट कर रहे हैं file.txt
, इसलिए द्वारा बनाई गई सभी प्रक्रिया cat
को हटा दिया गया था। मूल रूप से पूरी लाइन को सरल बनाया जा सकता है cp file.txt file2.txt
क्योंकि यह एक ही काम कर रहा है क्योंकि file2.txt
अंत में हारता है rev
और mv
कमांड के साथ ओवरराइट किया जाता है ।
rev file.txt | cat >> file.txt
इस स्थिति में आप सूचना को उसी फ़ाइल में भेज रहे हैं । तो यह केवल कि फाइल करने के लिए एक कनेक्शन खोल रहा है, लेकिन के रूप में एक साथ देखा जानकारी मिटा नहीं > । अंतिम परिणाम, मूल जानकारी और उलट जानकारी होनी चाहिए।
cat
इस तरह से बाहर भी छोड़ सकते हैंrev file.txt > file2.txt && mv file2.txt file.txt
:। यह एक शानदार उपयोग हैcat
। इसे छोड़ने से आप एक अतिरिक्त प्रक्रिया पैदा करते हैं।