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