सबसे पहले, 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पहले पूर्ववर्ती को डंप करता है मान्य फ़ाइलें, और फिर अमान्य फ़ाइल के बारे में शिकायत करता है (कम से कम मेरी बिल्ली कैसे व्यवहार करती है)।