अपने सरलतम रूप में, क्या प्रोग्राम सिर्फ टर्मिनल कमांड चलाते हैं?


18

उदाहरण के लिए एक कार्यक्रम में कहें, यह मुझे एक फ़ोल्डर का चयन करने और इसे दूसरे स्थान पर कॉपी करने की अनुमति देता है, बहुत ही बुनियादी स्तर पर यह है कि एप्लिकेशन रनिंग कमांड जो कि मैं टर्मिनल में चला सकता हूं या क्या यह उस चाल को बनाने के लिए कुछ आंतरिक ओएस एपीआई का उपयोग कर रहा है?

कृपया मुझे कोई भी शातिर प्रतिक्रिया दें; मैं बस उत्सुक हूं और पूरी तरह से अवगत हूं, यह एक प्रश्न के रूप में माना जा सकता है जो एक 13 वर्षीय पूछेगा।


4
अलग पूछने के लिए आपका स्वागत है! कुछ प्रश्न दूसरों की तुलना में अधिक उन्नत हैं, और यह ठीक है; आपको माफी माँगने की आवश्यकता नहीं है। यदि आपके पास Apple हार्डवेयर, Apple सॉफ़्टवेयर, अन्य Apple उत्पादों या सेवाओं, तृतीय-पक्ष हार्डवेयर और Apple उत्पादों के लिए सॉफ़्टवेयर के बारे में कोई प्रश्न है, और यह FAQ में निषिद्ध विषयों के बारे में नहीं है, तो आप अपना प्रश्न पूछने के लिए सही जगह पर हैं ! इसलिए यदि आपके प्रश्न है विषय पर, यह स्वागत यहाँ है, भले ही आप कर रहे हैं (है, लेकिन प्रति कोई छोटी एक 13 वर्षीय सेवा की शर्तें )।
डैनियल

3
महान प्रश्न - इस प्रश्न के उत्तर के कम से कम तीन गैर-तुच्छ स्तर हैं। मुझे उम्मीद है कि यह एक मूल उत्तर, एक मध्य एक और "जॉन सिराकुसा मैक ओएस एक्स एप्लीकेशन बाइनरी संरचना के आंतरिक कामकाज को भंग करता है" स्तर का उत्तर ताकि आप चुन सकें और सभी से सीख सकें।
bmike

जवाबों:


11

वैचारिक रूप से, यह हमेशा ओएस एपीआई का उपयोग करता है - सवाल केवल किस तरीके से है। अनिवार्य रूप से तीन विकल्प हैं।

  1. सीधे निम्न-स्तरीय OS API (सिस्टम कॉल) का उपयोग करना। आपके उदाहरण में कार्य काफी शामिल है: फ़ोल्डर में आइटम की सूची प्राप्त करें, प्रकार (फ़ोल्डर, फ़ाइल ...) की जांच करें, उनमें से प्रत्येक के लिए लक्ष्य फ़ोल्डर में संबंधित आइटम बनाएं, फ़ाइलों से सामग्री को पढ़ने के लिए। स्रोत, लक्ष्य फ़ाइल आदि को लिखें क्योंकि कार्य इतना जटिल है, इसलिए कुछ गलत करना आसान है, इसलिए अधिकांश एप्लिकेशन इससे बचेंगे।

  2. एक पुस्तकालय (एपीआई) का उपयोग करें जो कार्य को सरल करता है। उदाहरण के लिए Apple कोको फ्रेमवर्क NSFileManagerउस copyItemAtPath:toPath:errorविधि के साथ वर्ग प्रदान करता है जो निम्न-स्तरीय OS API का उपयोग करके सभी गंदे काम करता है, इसलिए एप्लिकेशन को स्वयं निम्न-स्तर API का उपयोग करने की आवश्यकता नहीं है, लेकिन उस चीज़ पर भरोसा कर सकते हैं जिसके लिए कम काम की आवश्यकता होती है और हमेशा होती है सिस्टम में मौजूद है। साथ ही Apple को यह सुनिश्चित करने की संभावना है कि यह अच्छी तरह से काम करता है।

  3. कार्य करने के लिए बाहरी प्रक्रिया का उपयोग करें। इस मामले में बाहरी प्रक्रिया काम करने के लिए ऊपर दो तरीकों में से एक का उपयोग करेगी। एप्लिकेशन को ऐसी प्रक्रिया शुरू करनी है, इसे मॉनिटर करना है और जब तक यह किया जाता है तब तक प्रतीक्षा करें। यह संभावना है कि इस तरह की प्रक्रिया को कमांड लाइन टूल के रूप में चलाया जा सकता है, इसलिए यह संभवतः एक कमांड होगा जिसे आप टर्मिनल में चला सकते हैं। इसकी गारंटी नहीं है, लेकिन बहुत संभव है।

अधिकांश एप्लिकेशन विकल्प 2 का उपयोग करेंगे। क्योंकि यह 1 से अधिक सरल है। 3. की ​​तुलना में अधिक सुरक्षित और कुशल है। बाहरी प्रक्रिया को चलाने के लिए आपको इसे ठीक से सेट करने की आवश्यकता है और आपके पास इसका कोई नियंत्रण नहीं है। उदाहरण के लिए यह पता लगाना बहुत कठिन है कि विफलता के मामले में क्या गलत हुआ और यह जानना कठिन है कि यह क्या कर रहा है (जैसे कि प्रगति)। इसीलिए ज्यादातर मामलों में डेवलपर्स विकल्प 2 का चयन करेंगे, लेकिन इसकी कोई गारंटी नहीं है। एक उल्लेखनीय उदाहरण ऐसे अनुप्रयोग हैं जो अनुकूलन के लिए शेल स्क्रिप्ट का उपयोग करते हैं - जैसे इंस्टॉलर।

उन्नत उपयोगकर्ता नोट: आप यह dtraceपता लगाने के लिए कि किसी विशेष एप्लिकेशन क्या कर रहे हैं, OS X की सुविधा का उपयोग कर सकते हैं। उदाहरण के लिए, आप किसी भी प्रक्रिया की जाँच कर सकते हैं यह स्पॉनिंग है ताकि आप देख सकें कि उपकरण किसका उपयोग कर रहा है (देखें execsnoop)।


4

मुझे डर है कि उत्तर "यह निर्भर करता है, लेकिन आमतौर पर दूसरा है।" दरअसल, भले ही GUI प्रोग्राम टर्मिनल कमांड चला रहा हो, लेकिन यह उन्हें API कहकर चलाता है।

एक प्रोग्राम जो केवल टर्मिनल कमांड की एक सूची है, उसे शेल स्क्रिप्ट कहा जाता है। ऐसे कार्यक्रम मैक ओएस एक्स में चल सकते हैं, लेकिन उन्हें या तो एक टर्मिनल विंडो में चलना होगा या एक प्रोग्राम लॉन्च करना होगा जो GUI का उपयोग करता है यदि आप उनका आउटपुट देखना चाहते हैं। अन्य प्रोग्राम आंतरिक API के माध्यम से कमांड लाइन प्रोग्राम कह सकते हैं।

जबकि अधिकांश विकास प्रश्न इस साइट के लिए ऑफ-टॉपिक हैं, एक उदाहरण जो वास्तव में ऑन-टॉपिक है, जिसमें ऑटोमेकर चलाना शामिल है।

आंतरिक आदेशों की सूची के भीतर एक विकल्प जो स्वचालित रूप से कॉल किया जा सकता है, एक शेल स्क्रिप्ट या टर्मिनल कमांड की सूची को कॉल करने की क्षमता है। लेकिन यह सिर्फ इसके आंतरिक एपीआई के भीतर उपलब्ध कई विकल्पों में से एक है।

यहाँ छवि विवरण दर्ज करें


लेकिन कभी-कभी एपीआई कॉलिंग कमांड को समाप्त करते हैं जो आप टर्मिनल से एक्सेस कर सकते हैं। मैंने रिपोर्ट्स पढ़ी हैं (मुझे खुद के कंप्यूटर पर दोहराने के लिए कुछ भी नहीं है, बहुत-बहुत धन्यवाद) कि अगर /sbin/shutdownक्षतिग्रस्त या हटा दिया गया है, तो Apple मेनू में शटडाउन कमांड काम करना बंद कर देता है।
डैनियल

1
शेल स्क्रिप्ट को टर्मिनल विंडो या विंडो के किसी अन्य सॉफ्ट में नहीं चलना होता है। लेकिन अगर वे ऐसे आउटपुट का उत्पादन करते हैं जो किसी फ़ाइल पर पुनर्निर्देशित नहीं होता है, तो आप इसे एक विंडो में चलाने का विकल्प चुन सकते हैं। शेल स्क्रिप्ट अन्य प्रोग्राम भी चला सकती हैं जिनमें खिड़कियां हैं।
ctrl-alt-delor

@richard बिल्कुल सही। संपादित।
डैनियल

2

यूनिक्स के पीछे एक महान विचार है (था) कि अगर आपको एक कार्यक्रम के लिए एक विचार मिला है, तो आप पहले इसे शेल स्क्रिप्ट के रूप में लिखेंगे - अनिवार्य रूप से आदेशों की एक श्रृंखला बुला रहे हैं।

फिर, यदि कार्यक्रम उपयोगी साबित हुआ, तो आप इसके इंटरफ़ेस में सुधार कर सकते हैं, उपयोगकर्ताओं को इसका परीक्षण कर सकते हैं, और अंत में, जब आप आश्वस्त थे कि यह इसके लायक है, तो एक "वास्तविक" प्रोग्राम लिखें।

यह, निश्चित रूप से, ग्राफिकल यूजर इंटरफेस को संभालने से पहले था, इसलिए यहां "प्रोग्राम" अपने आप में एक सीएलआई कमांड है।

आप अभी भी कुछ आधुनिक कार्यक्रमों में इस दृष्टिकोण को देखते हैं, खासकर यदि वे सिस्टम जानकारी दिखाते हैं। एक फ़ोल्डर में सभी फ़ाइलों को सूचीबद्ध करने के लिए एक साधारण ऐप बनाना चाहते हैं? बस चलाएं ls -al, परिणाम को पार्स करें और इसे एक तालिका दिखाएं। विभिन्न मापदंडों के साथ मज़े करें, और आपके पास संस्करण 2.0 के लिए अपनी सामग्री है


1

टर्मिनल कमांड चलाने वाले कार्यक्रमों का एक वर्ग (भले ही यह सब एक एपीआई कॉल से शुरू होता है) एकीकृत कार्यक्रम-विकास वातावरण है जैसे कि ग्रहण या एक्सकोड। कार्यक्रम के विकास के लिए आवश्यक उपकरणों का संग्रह एक आईडीई के लिए निहित और बनाए रखने के लिए बहुत बड़ा है। इसके बजाय, यह एक मेकफाइल (एक प्रकार की स्क्रिप्ट) बनाता है और इसे संकलन, लिंक, लोड और डीबग प्रक्रिया के माध्यम से कदम रखने के लिए यूनिक्स 'मेक' (या समतुल्य) के साथ चलाता है। बदले में, कंपाइलर, लिंकर, आदि को उनके कमांड-लाइन इंटरफेस का उपयोग करके चलाता है। यह IDE प्रोग्रामर द्वारा चुने गए टूल-सेट से अपेक्षाकृत स्वतंत्र है, और टूल के अपडेट के लिए असंवेदनशील है।


1

एप्लिकेशन एक निश्चित कार्य करने के लिए CLI कमांड चला सकते हैं, और कुछ वास्तव में करते हैं; लेकिन दक्षता के मुद्दों के कारण, पेशेवर एप्लिकेशन डेवलपर्स कमांड चलाने से बचते हैं और इसके बजाय एपीआई का उपयोग करते हैं जो कमांड आवश्यक कार्य को करने के लिए उपयोग करता है।


मैं एक पेशेवर सॉफ्टवेयर इंजीनियर हूं। मैं अपने कार्यक्रमों से कमांड बुलाता हूं। मैं स्वयं भी उनमें से कुछ या सभी लिखूंगा, फिर एक अलग भाषा में गुई लिखेंगे। हालाँकि मैं cp (कॉपी) या mv (मूव / रिनेम) कमांड्स का उपयोग नहीं करूंगा क्योंकि कॉपी या नाम बदलने के लिए एपी सरल है। कुछ फ्री सॉफ्टवेयर प्रोजेक्ट इस तकनीक का उपयोग करते हैं। कुछ आशाओं ने कमांड लाइन टूल का उपयोग करने के लिए एक उत्कृष्ट लेकिन कठिन लिखा है (जैसे कि एक आईएसओ सीडी छवि बनाने के लिए, और सीडी में एक छवि लिखने के लिए) गुई विशेषज्ञ इन दोनों उपकरणों का उपयोग करने वाले एक जीआईआई लिखता है, जो मूल रूप से उपयोगकर्ता को उपकरण कॉन्फ़िगर करने की अनुमति देता है। , उन्हें जाने के लिए सेट करें, और प्रगति की निगरानी करें।
ctrl-alt-delor

मैंने एपीआई का उपयोग केवल साधारण शब्द के रूप में किया था जो प्रश्न का उपयोग करता था। वास्तव में, मैंने प्रत्येक बार उत्तर को कम-से-कम दर्शकों के लिए बनाते हुए कम-से-कम कोड के साथ बनाते हुए लिखा है और एपीआई बनाम लिबास बनाम फ्रेमवर्क इत्यादि के नामकरण सम्मेलनों से मेरा मतलब है कि आप या आपके पेशे @richrad के लिए कोई अपराध नहीं है, न ही किसी के लिए अन्य पेशेवर सॉफ्टवेयर इंजीनियर। अगर कुछ ऐसा है जिसे आप मेरी पोस्ट में संपादित करना चाहते हैं जो इस मामले को और स्पष्ट करेगा, तो कृपया आगे बढ़ें और ऐसा करें।
इस्माइल

कोई अपराध नहीं है, मैं सिर्फ स्पष्ट कर रहा हूं। एक अच्छा प्रोग्रामर कमांड लाइन कार्यक्रमों को कॉल या अभ्यस्त नहीं करेगा, यह निर्णय जटिलता पर आधारित होगा और संभवतः (गति को मापने के बाद) दक्षता पर आधारित होगा। बाजार में बेचने वाले पेशेवरों के छोटे समूह के लिए, आपके कार्यक्रम को जटिल बनाने की आवश्यकता हो सकती है; कमांड लाइन प्रोग्राम को कॉल करना, बस सरल लग सकता है। इसलिए एक पुनर्लेखन की आवश्यकता है। अगर आप कमिशन या फ्री-सॉफ्टवेयर करते हैं तो आप सबसे सरल काम करते हैं।
ctrl-alt-delor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.