इस प्रश्न का उद्देश्य एक विशेष कंप्यूटिंग समस्या को हल करने के लिए नहीं, एक जिज्ञासा का जवाब देना है। सवाल यह है: POSIX अनिवार्य उपयोगिताओं को आमतौर पर शेल कार्यान्वयन में क्यों नहीं बनाया गया है?
उदाहरण के लिए, मेरे पास एक स्क्रिप्ट है जो मूल रूप से कुछ छोटी पाठ फ़ाइलों को पढ़ती है और जांचती है कि वे ठीक से प्रारूपित हैं, लेकिन स्ट्रिंग की हेरफेर की एक महत्वपूर्ण मात्रा के कारण, मेरी मशीन पर इसे चलाने में 27 सेकंड लगते हैं। यह स्ट्रिंग हेरफेर विभिन्न उपयोगिताओं को कॉल करके हजारों नई प्रक्रियाएं बनाता है, इसलिए धीमापन। मैं बहुत विश्वास है कि अगर उपयोगिताओं में से कुछ में, अर्थात् का निर्माण किया गया हूँ grep
, sed
, cut
, tr
, और expr
, तो स्क्रिप्ट एक दूसरे में चला जाएगा या उससे कम (सी में मेरे अनुभव के आधार पर)।
ऐसा लगता है कि इन उपयोगिताओं के निर्माण में बहुत सारी स्थितियाँ होंगी, जो शेल स्क्रिप्ट में एक समाधान के स्वीकार्य प्रदर्शन के बीच अंतर कर पाएंगी या नहीं।
जाहिर है, एक कारण यह है कि इन उपयोगिताओं को बनाने के लिए नहीं चुना गया था। हो सकता है कि सिस्टम स्तर पर उपयोगिता का एक संस्करण होने से उस उपयोगिता के कई असमान संस्करण होने से बचा जा सकता है जो विभिन्न गोले द्वारा उपयोग किया जा रहा है। मैं वास्तव में कई नई प्रक्रियाओं को बनाने के ओवरहेड को रखने के लिए कई अन्य कारणों के बारे में नहीं सोच सकता हूं, और पोसिक्स उन उपयोगिताओं के बारे में पर्याप्त रूप से परिभाषित करता है कि यह अलग-अलग कार्यान्वयन के लिए एक समस्या की तरह प्रतीत नहीं होता है, इसलिए जब तक वे प्रत्येक POSIX नहीं हैं। आज्ञाकारी। कम से कम उतनी बड़ी समस्या नहीं है जितनी कि इतनी सारी प्रक्रियाएँ होने की अक्षमता।
printf
, आदि) को शेल में शामिल किया गया है जब उन्हें पर्याप्त उपयोगी माना गया था।
awk
POSIX में एक अनिवार्य उपयोगिता (जो है, बहुत तेजी से) स्क्रिप्ट को लागू करने कि आप अन्यथा का उपयोग कर लागू हो सकता है, और विशेष रूप से अच्छी तरह से अनुकूल है sed
, cut
, tr
, grep
, और expr
एक खोल स्क्रिप्ट में।