केवल 1) आपके प्रश्न का कवर।
स्वाभाविक रूप से एपीआई हमेशा अपने रचनाकारों की इच्छा पर बदल सकते हैं, और इस तरह किसी भी भाषा में निर्भर सॉफ्टवेयर को तोड़ सकते हैं। उस ने कहा, यूनिक्स उपकरण ' I / O "APIs का महान विचार यह है कि व्यावहारिक रूप से कोई भी नहीं है (शायद 0x0a
पंक्ति के अंत के रूप में)। एक अच्छी स्क्रिप्ट डेटा को बनाने के बजाय यूनिक्स टूल्स के साथ फ़िल्टर करती है। इसका मतलब है कि आपकी स्क्रिप्ट टूट सकती है क्योंकि इनपुट या आउटपुट कल्पना बदल गई है, लेकिन इसलिए नहीं कि स्क्रिप्ट में उपयोग किए गए अलग-अलग टूल के I / O प्रारूप (फिर से, वास्तव में एक नहीं है) (क्योंकि कुछ ऐसा है जो वास्तव में मौजूद नहीं है) वास्तव में बदल नहीं सकते)।
बुनियादी उपकरणों की एक सूची के माध्यम से जा रहे हैं, वहाँ कुछ है कि मैं भी निर्माता विशेषता होगी , केवल फिल्टर के विपरीत:
- wc - बाइट्स, शब्द, रेखाओं की प्रिंट संख्या - बहुत सरल प्रारूप, इस प्रकार परिवर्तन की पूरी संभावना नहीं है, और इसके अलावा एक स्क्रिप्ट में उपयोग किए जाने की बहुत संभावना नहीं है।
- अंतर - अलग-अलग आउटपुट स्वरूप विकसित हुए हैं, लेकिन मैंने किसी भी समस्या के बारे में नहीं सुना है। पर्यवेक्षण के बिना भी सामान्य रूप से उपयोग नहीं किया जाता है।
- दिनांक - अब यहाँ हमें वास्तव में ध्यान रखना है कि हम क्या उत्पादन करते हैं, खासकर सिस्टम लोकेल के बारे में। लेकिन अन्यथा आउटपुट फॉर्मेट RFC'ed दिया जाता है, आप इसे स्वयं निर्दिष्ट नहीं करते हैं।
- cal - चलो इसके बारे में बात नहीं करते हैं, मुझे पता है कि आउटपुट प्रारूप पूरे सिस्टम में बहुत भिन्न होता है।
- ls , जो , w , last - यदि आप ls को पार्स करना चाहते हैं तो मैं मदद नहीं कर सकता, यह सिर्फ होना ही नहीं था। इसके अलावा, कौन, w, अंतिम, अधिक संवादात्मक श्रोता हैं; यदि आप उन्हें एक स्क्रिप्ट में उपयोग करते हैं तो आपको ध्यान रखना होगा कि आप क्या करते हैं।
- समय एक और पोस्ट में बताया गया था। लेकिन हाँ, यह ls के समान है। इंटरैक्टिव / स्थानीय उपयोग के लिए अधिक। और बाश बिलिन जीएनयू संस्करण से बहुत अलग है, और जीएनयू संस्करण में कई वर्षों तक बग़ैर कीड़े हैं। बस इस पर भरोसा मत करो।
यहां ऐसे उपकरण हैं जो किसी विशेष इनपुट प्रारूप को बाइट स्ट्रीम से अधिक विशिष्ट होने की उम्मीद करते हैं:
- बीसी , डीसी - कैलकुलेटर। पहले से ही चीजों के अधिक हैकिश पक्ष पर (वास्तव में, मैं उन्हें स्क्रिप्ट में उपयोग नहीं करता हूं), और संभवतः बहुत स्थिर I / O प्रारूप।
कमांड-लाइन इंटरफ़ेस अर्थात् टूट-फूट के बहुत अधिक जोखिम के साथ एक और क्षेत्र है। अधिकांश टूल में सिस्टम और समय रेखा के पार दोनों में अलग-अलग विशेषताएं होती हैं। उदाहरण हैं
- रेगेक्स - रेगेक्स का उपयोग करने वाले सभी उपकरण सिस्टम लोकेल (उदाहरण LC_COLLATE) के आधार पर अर्थ बदल सकते हैं और रेगेक्स कार्यान्वयन में कई सूक्ष्मताएं और विशिष्टताएं हैं।
- बस फैंसी स्विच का उपयोग न करें। आप
man 1p find
उदाहरण के लिए आसानी से उपयोग कर सकते हैं , सिस्टम मैनपेज के बजाय पोसिक्स फाइंड मैनपेज पढ़ने के लिए। मेरे सिस्टम पर, मुझे मैनपेज़-पॉज़िक्स स्थापित करने की आवश्यकता है।
और इस तरह के स्विच का उपयोग करते समय भी, आम तौर पर त्रुटियों को सूक्ष्मता से पेश नहीं किया जाएगा और आपके डेटा को जहर कर देगा। अधिकांश कार्यक्रम बस एक अज्ञात स्विच के साथ काम करने से मना कर देंगे।
समाप्त करने के लिए, मैं कहूंगा कि शेल में वास्तव में सबसे अधिक पोर्टेबल भाषाओं में से एक होने की क्षमता है (यह पोर्टेबल है जब आप स्क्रिप्टिंग करते हैं)। अपनी पसंदीदा स्क्रिप्टिंग भाषाओं की तुलना करें जहां सूक्ष्म त्रुटियां होती हैं, या आपका पसंदीदा संकलित कार्यक्रम जो संकलन करने के लिए बंद हो जाएगा।
इसके अतिरिक्त, दुर्लभ स्थानों पर जहां असंगति के कारण टूट-फूट हो सकती है, यह शायद समय से प्रेरित होने के कारण नहीं होगा, लेकिन विभिन्न प्रणालियों में विविधता के कारण (इसका मतलब है कि अगर यह आपके लिए काम करता है, तो यह 20 साल पहले और 20 वर्षों में ऐसा किया था। , भी)। यह उपकरण की सादगी का एक पुंज है।