सबसे पहले, cat
मानक आउटपुट को लिखते हैं, जो जरूरी नहीं कि एक टर्मिनल है, भले ही cat
एक कमांड के रूप में एक इंटरैक्टिव शेल में टाइप किया गया हो। यदि मानक मानक पुनर्निर्देशित होने पर भी आपको टर्मिनल पर लिखने के लिए कुछ चाहिए, तो यह इतना आसान नहीं है (आपको यह निर्दिष्ट करने की आवश्यकता है कि कौन सी टर्मिनल है, और एक स्क्रिप्ट से कमांड निष्पादित होने पर एक भी नहीं हो सकता है), हालांकि एक अगर कमांड केवल एक पाइप लाइन का एक हिस्सा है, तो (ab) मानक त्रुटि आउटपुट का उपयोग कर सकता है। लेकिन जब से आपने संकेत दिया कि cat
वास्तव में काम करता है, मुझे लगता है कि आप ऐसी स्थिति के बारे में नहीं पूछ रहे थे।
यदि आपका उद्देश्य मानक आउटपुट में लिखे गए को एक पाइपलाइन में भेजने का था, तो उपयोग cat
करना बिल्ली के लिए बेकार उपयोग के योग्य होगा , क्योंकि cat file | pipeline
(जहां pipeline
किसी भी पाइपलाइन के लिए खड़ा है) को अधिक कुशलता से किया जा सकता है <file pipeline
। लेकिन फिर, आपके शब्दों से मैं यह कहता हूं कि यह आपका इरादा नहीं था।
इसलिए यह इतना स्पष्ट नहीं है कि आप किस बारे में चिंता कर रहे हैं। यदि आप cat
टाइप करने के लिए बहुत लंबे समय तक पाते हैं, तो आप एक या दो-चरित्र उर्फ को परिभाषित कर सकते हैं (अभी भी कुछ ऐसे नाम हैं जो मानक यूनिक्स में अप्रयुक्त रहते हैं)। यदि आप चिंता कर रहे हैं कि cat
बेकार चक्र खर्च कर रहे हैं , तो आपको नहीं करना चाहिए।
यदि कोई ऐसा कार्यक्रम था null
जो कोई तर्क नहीं लेता है और बस मानक इनपुट को मानक आउटपुट (पाइपलाइनों के लिए तटस्थ वस्तु) की प्रतिलिपि बनाता है, तो आप वह कर सकते हैं जो आप चाहते हैं <file null
। ऐसा कोई कार्यक्रम नहीं है, हालांकि यह लिखना आसान होगा (केवल एक-लाइन main
फ़ंक्शन के साथ एक सी प्रोग्राम काम कर सकता है), लेकिन cat
बिना तर्कों के कॉल करना (या cat -
यदि आप स्पष्ट होना पसंद करते हैं) तो बस यही करता है।
यदि कोई ऐसा nocat
कार्यक्रम था जो बिल्कुल एक फ़ाइल नाम तर्क लेता है, तो फ़ाइल को खोलने की कोशिश करता है, अगर यह नहीं हो सकता है, तो इसकी शिकायत करता है, और अन्यथा फ़ाइल से मानक आउटपुट पर कॉपी करने के लिए आगे बढ़ता है, तो यह वही होगा जो आप पूछ रहे हैं। यह लिखने की तुलना में केवल थोड़ा कठिन है null
, मुख्य कार्य फ़ाइल खोलना, परीक्षण करना, और संभवतः शिकायत करना (यदि आप सावधानीपूर्वक हैं, तो आप एक परीक्षण भी शामिल करना चाह सकते हैं कि एक तर्क है, और अन्यथा शिकायत करें)। लेकिन फिर cat
, अब एक ही तर्क के साथ प्रदान किया जाता है, बस यही करता है, इसलिए किसी भी nocat
कार्यक्रम की कोई आवश्यकता नहीं है ।
एक बार जब आप nocat
प्रोग्राम लिखने में सफल हो गए , तो एक ही तर्क पर क्यों रुकें? कोड को एक लूप में लपेटना for(;*argp!=NULL;++argp)
वास्तव में कोई प्रयास नहीं है, बाइनरी में मशीन के अधिकांश निर्देशों को जोड़ता है, और गलत संख्या के तर्कों के बारे में शिकायत करने से बचता है (जो कई और निर्देशों को बख्शता है)। Voilà का एक आदिम संस्करण cat
, सम्मिलित फ़ाइलें। (ईमानदार होने के लिए आपको इसे थोड़ा मोड़ने की ज़रूरत है ताकि तर्क के बिना यह व्यवहार करे null
।)
निश्चित रूप से वास्तविक cat
कार्यक्रम में, उन्होंने कुछ घंटियाँ और सीटी जोड़ीं, क्योंकि वे हमेशा करते हैं। लेकिन सार यह है कि cat
लागत का "संक्षिप्त" पहलू वास्तव में न तो किसी भी कार्यक्रम के लिए, न ही प्रोग्रामर के लिए और न ही मशीन के निष्पादन के लिए है। तथ्य यह है कि इस तरह के कार्यक्रमों के अस्तित्व को cat
समझा null
और nocat
समझाता है। cat
यदि परिणाम पाइपलाइन में जाता है, तो एक ही तर्क के साथ उपयोग करने से बचें , लेकिन अगर यह टर्मिनल पर फ़ाइल सामग्री को प्रदर्शित करने के लिए उपयोग किया जाता है, तो यहां तक कि पृष्ठ जो मैं मानता हूं कि यह उपयोगी उपयोग है cat
, इसलिए संकोच न करें।
आप परीक्षण कर सकते हैं जो cat
वास्तव में एक हाइपरथेटिक nocat
कार्यक्षमता के चारों ओर एक सरल लूप द्वारा लागू किया गया है , cat
जिसमें कई फ़ाइल नामों के साथ कॉल करके, जिनके बीच एक अमान्य नाम है, पहली स्थिति में नहीं: तुरंत शिकायत करने के बजाय कि यह फ़ाइल मौजूद नहीं है, cat
पहले पूर्ववर्ती को डंप करता है मान्य फ़ाइलें, और फिर अमान्य फ़ाइल के बारे में शिकायत करता है (कम से कम मेरी बिल्ली कैसे व्यवहार करती है)।