मुझे संदेह है कि वह व्यवहार अनुमानित है (और निश्चित रूप से उस पर निर्भर नहीं होगा)। teeआदेश शायद 'अन्य' गंतव्य के लिए अपने इनपुट भेजने के लिए एक नई प्रक्रिया शुरू होता है। ऑपरेटिंग सिस्टम आउटपुट को तब तक 'बफर' करेगा जब तक कि वह उस बिंदु तक नहीं पहुंच जाता जहां वह गंतव्य फ़ाइल बनाता है और फ़ाइल को अपना अस्थायी बफर लिखता है। ऐसा होने का सटीक क्षण (और स्रोत को अधिलेखित) शायद इस पर निर्भर करता है:
- फ़ाइल का आकार और बफर के लिए उपलब्ध मेमोरी
- बीता हुआ समय
- यदि पाइप से
teeखत्म करने के लिए इनपुट
यह इससे कहीं अधिक गहरा है bash: यह कार्यक्रम के काम करने का तरीका है जो bashशुरू होता है। शेल सिर्फ आपके द्वारा टाइप किए गए कमांड की व्याख्या करता है, और कमांड को निष्पादित करने के लिए आवश्यक प्रोग्राम शुरू करता है। शेल का कोई नियंत्रण नहीं है कि प्रत्येक प्रोग्राम कैसे काम करता है, और यहां तक कि उन कार्यक्रमों को कैसे इंटरैक्ट करता है, इस पर भी कम। एक इनपुट फ़ाइल से डेटा लेने के लिए एक प्रोग्राम (या कार्यक्रमों का एक सेट) पूछना, और एक ही वाक्य में एक ही इनपुट फ़ाइल पर परिणाम लिखना, उपयोगकर्ता की जिम्मेदारी है।
यह मत भूलो कि बैश केवल उपयोगकर्ता कमांड का दुभाषिया है: यह shellउपयोगकर्ता के इरादों को सिस्टम कॉल में बदलने के लिए ऑपरेटिंग सिस्टम के आसपास है।
और यह प्रलेखित है , भी! या यह मेल , जो इसी तरह की समस्याओं को संबोधित करता है। या यह StackOverflow थ्रेड । या यह सर्वरफॉल्ट थ्रेड ।
ध्यान दें कि यह पुनर्निर्देशन के साथ भी हो सकता है stdin: यदि आप किसी फ़ाइल से इनपुट कमांड लेते हैं $ myprog < commandfile:। अगर myprogकमांडफाइल को लिखते हैं, तो कोई गारंटी नहीं है कि सभी commandfileकमांड निष्पादित होंगे।
वास्तव में बुनियादी सादृश्य इस अनुदेश सूची की तरह होगा:
- Execute the instructions step by step
- Dip this instruction list in a bucket of black paint
- Type in the following commands:
find /etc -type f -exec cat '{}' \; | tr -c '.[:digit:]' '\n' \
| grep '^[^.][^.]*\.[^.][^.]*\.[^.][^.]*\.[^.][^.]*$'
मुझे लगता है कि आप पहले एक प्रति बना लेंगे? ( एडवांस बैश-स्क्रिप्टिंग गाइड से ली गई कमांड )
GNU sortकर रहे हैं तो आप-oविकल्प का उपयोग कर सकते हैंsort file1 -o file1:।