AppleScript बनाम बैश स्क्रिप्ट?


13

मैं एक लंबे समय तक विंडोज "पावर यूजर" और डेवलपर हूं, जिन्होंने हाल ही में मैक ओएस एक्स पर जाने का फैसला किया है।

OS X Lion और वास्तव में पिछले संस्करणों में OS X में स्क्रिप्टिंग और ऑटोमेशन के दो मुख्य विकल्प प्रतीत होते हैं: AppleScript और Bash स्क्रिप्ट। उत्तरार्द्ध निश्चित रूप से ओएस एक्स का एक सीधा परिणाम है जो यूनिक्स "बैश" शेल का उपयोग कर रहा है, जबकि पूर्व एप्पल का खुद का नवाचार है। वाक्यविन्यास स्पष्ट रूप से बहुत भिन्न हैं, AppleScript के पास एक छद्म प्राकृतिक भाषा शैली है।

मेरा प्रश्न है, क्या OS X पर असमान कार्यों और उद्देश्यों के लिए आमतौर पर AppleScript और बैश स्क्रिप्ट का उपयोग किया जाता है (वास्तव में, इनका उपयोग किया जाना चाहिए)। मैं उन विभिन्न प्रकार के कार्यों से परिचित हूं, जिन्हें मैं बैश स्क्रिप्ट के साथ पूरा कर सकता हूं, हालांकि कोड। कुछ और उन्नत लोगों के लिए जल्दी से जटिल बन सकता है। क्या AppleScript के Apple के बाद के आविष्कार के बावजूद, इन दोनों भाषाओं में ओवरलैपिंग या निकट-समान उपयोग के मामले हैं - या क्या वे अलग-अलग परिदृश्यों को ध्यान में रखकर उपयोग किए जाने का इरादा रखते हैं? एक उच्च-स्तरीय अवलोकन और साथ ही कुछ विशिष्ट उदाहरणों की सराहना की जाएगी।


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

जवाबों:


17

दोनों शेल और AppleScripts का उपयोग कहीं भी किया जा सकता है या तो उपयुक्त है।

ऐप्स और उपयोगकर्ता-स्तरीय सिस्टम सुविधाओं से बात करते समय AppleScripts बेहतर काम करता है। (उदाहरण के लिए, आप कह सकते हैं tell app "iTunes" to playऔर यह होगा, या tell app "Finder" to open the first file of the second window)

निम्न-स्तरीय सिस्टम ऑब्जेक्ट्स और Unixy सामान से बात करते समय शेल स्क्रिप्ट (आपको बैश करने के लिए संदर्भित) बेहतर काम करते हैं।

वे दोनों इंटरऑपरेबल हैं: आप AppleScript से शेल कमांड do shell script "command here"को कॉल कर सकते हैं और आप शेल से AppleScript कोड को कॉल कर सकते हैं osascript -e "AppleScript"। इसके अलावा, दोनों के बीच काफी ओवरलैप है (विशेषकर जब यह फाइल सिस्टम ऑपरेशन के लिए आता है)।

AppleScript की तुलना में शेल स्क्रिप्टिंग ऑनलाइन सीखने के लिए निश्चित रूप से अधिक संसाधन हैं और यह मदद नहीं करता है कि AppleScript में "रीड-ओनली" भाषा होने के लिए एक प्रतिष्ठा है (यानी, पढ़ने के लिए लिखने में कठिन)।

किसी भी मामले में, स्क्रिप्टिंग करने का सबसे आधुनिक तरीका ऑटोमेटर के साथ है, जहां आप अपने द्वारा इंस्टॉल किए गए विभिन्न ऐप से पूर्व-निर्मित मॉड्यूल के साथ-साथ शेल- या AppleScripting (या दोनों) का उपयोग कर सकते हैं।


धन्यवाद; यह एक बहुत जानकारीपूर्ण अवलोकन है। क्या आपके पास AppleScript perchance पर अच्छे सीखने के संसाधनों के लिए कोई सिफारिशें हैं? (बैश स्क्रिप्ट भी, हालांकि मैं उन लोगों को आसानी से पा सकता हूं जो शायद खुद हैं।)
नोल्डोरिन

3
AppleScript में केवल पढ़ने के लिए (कुछ अर्जित) प्रतिष्ठा है; शेल स्क्रिप्ट कभी-कभी स्पेक्ट्रम के "राइट-ओनली" छोर की ओर झुक जाती हैं।
डेनियल

@ नोल्डोरिन मैंने ऐप्पलस्क्रिप्ट सीखने के लिए एक पुस्तक खरीदी थी, लेकिन जब मैं किसी विशेष कमांड के सिंटैक्स को याद करने की कोशिश कर रहा होता हूं तो मैं पहले Google और पुस्तक के सूचकांक का उपयोग करता हूं।
काजुनलुक

@CajunLuke: आह, काफी निष्पक्ष। हालांकि आपने पहली बार AppleScript कैसे सीखा?
नोल्डोरिन

@ नोल्डोरिन बहुत परीक्षण और त्रुटि और Google। Google के लिए कुछ चीजें कठिन हैं, इसलिए मैंने पुस्तक खरीदी है।
काजुनलुक

8

हालांकि या तो स्क्रिप्टिंग संदर्भ कुछ भी कर सकता है अन्य (क्योंकि शेल स्क्रिप्ट /usr/bin/osascriptएक AppleScript को आह्वान करने के लिए कॉल कर सकते हैं , और AppleScript में do shell scriptकमांड है), वास्तव में संदर्भ हैं जिनके लिए एक दूसरे की तुलना में बेहतर है।

दोनों स्क्रिप्टिंग भाषा "गोंद" भाषाएं हैं - वे स्वयं न्यूनतम चीजें कर सकते हैं, और इसके बजाय अन्य कार्यक्रमों की क्षमताओं को लागू करके अपने अधिकांश कार्यों को पूरा करते हैं। शेल स्क्रिप्ट यूनिक्स पाइप का उपयोग करते हैं, जबकि AppleScript में tell applicationवाक्य रचना है।

जहां वे कहते हैं कि AppleScripts सीधे स्क्रिप्ट करने योग्य एप्लिकेशन (लगभग हमेशा GUI एप्लिकेशन) के साथ संवाद करता है, जबकि शेल स्क्रिप्ट मुख्य रूप से कमांड-लाइन प्रोग्राम (जिनमें से कुछ ग्राफिक उपयोगकर्ता इंटरफेस को आमंत्रित कर सकते हैं, लेकिन कई नहीं करते हैं) के साथ संवाद करते हैं।

जब यह प्रबंधन कार्यों को दर्ज करने की बात आती है, तो दोनों दृष्टिकोण काम कर सकते हैं। Tell Application Finderफ़ाइलों की प्रतिलिपि बनाने के लिए, या cpशेल स्क्रिप्ट में कमांड चला सकते हैं । तो क्यों एक दूसरे का उपयोग करें? निश्चित रूप से कुछ स्क्रिप्ट लेखक एक भाषा से दूसरे की तुलना में अधिक परिचित हैं, और इस प्रकार उस टूल का उपयोग करना पसंद करेंगे। लेकिन एक बेहतर विचार स्क्रिप्ट के उपयोगकर्ता का है। AppleScript को अक्सर मैक GUI से मंगाया जा सकता है: AppleScript एप्लिकेशन को डबल-क्लिक करना, या एक पर फ़ाइलों को छोड़ना, या किसी सिस्टम प्रोग्राम के भीतर या किसी विशेष प्रोग्राम में AppleScript मेनू का उपयोग करना। उन्हें फ़िल्टर करने के लिए आने वाले संदेशों पर AppleScript चलाने के लिए मेल जैसे प्रोग्राम सेट किए जा सकते हैं। उपयोगकर्ताओं को "मैक-लाइक" तरीके (यानी जीयूआई से) में मैक का उपयोग करने के आदी हैं, AppleScripts अक्सर बहुत अधिक सुलभ होते हैं।

शेल स्क्रिप्ट अक्सर (लेकिन हमेशा नहीं) टर्मिनल में रहते हैं। यदि कोई पहले से ही टर्मिनल का उपयोग कर रहा है, तो शेल स्क्रिप्ट चलाना वहां AppleScript को लागू करने से अधिक सुविधाजनक हो सकता है। दूसरी ओर, कई उपयोगकर्ता टर्मिनल विंडो में कमांड टाइप करके, या यहां तक ​​कि एक स्क्रिप्ट फ़ाइल पर क्लिक करके बंद कर देते हैं, जो अपना जादू करने के लिए टर्मिनल विंडो खोलती है। मैं व्यक्तिगत रूप से Apple स्क्रिप्ट्स की तुलना में अधिक आसानी से पढ़ने योग्य शेल स्क्रिप्ट का सिंटैक्स ढूंढता हूं, लेकिन मुझे संदेह है कि मैं उस पर अल्पमत में हूं। शेल स्क्रिप्ट कई अलग-अलग यूनिक्स जैसी प्रणालियों के उपयोगकर्ताओं से परिचित हैं

किसी भी घटना में, दोनों आपके मैक पर बेहतर नियंत्रण पाने के लिए शक्तिशाली उपकरण हैं।


धन्यवाद; यह निश्चित रूप से मामले को स्पष्ट करता है और मेरे कुछ संदेह की पुष्टि करता है।
नोल्डोरिन

मैं अनुमान लगा रहा हूं कि Tell Application Finderफाइलों को कॉपी करने के लिए एक दृश्य प्रगति पट्टी के साथ एक खिड़की खुलेगी, जबकि cpऐसा नहीं होगा। क्या वह सही है?
TRIG

4

अन्य उत्तर इन दो स्क्रिप्टिंग तकनीकों के पीछे की मंशा के उच्च-स्तरीय साक्षात्कार देते हैं। हो सकता है कि मैं आपको सिर्फ उदाहरण दूं कि मैं उनका उपयोग कैसे करता हूं।

एप्सस्क्रिप्ट के साथ, मैंने मेल के लिए प्रसंस्करण नियम बनाये हैं, BBEdit को R से सांख्यिकीय प्रसंस्करण के लिए जोड़ा है, जटिल फोल्डर क्रियाओं का निर्माण किया है, और iPhoto और एपर्चर में मेरी तस्वीरों का एक बड़े समय-आधारित पुनर्गठन किया है। मैंने बटन और टेक्स्ट डिस्प्ले के साथ मिनी-ऐप भी बनाए हैं। मूल रूप से, यह GUI के साथ जटिल ऐप्स का स्वचालित हेरफेर है।

बैश स्क्रिप्टिंग के साथ, मैंने Imagemagick के साथ स्वचालित इमेज प्रोसेसिंग रूटीन, घोस्टस्क्रिप्ट के साथ पीडीएफ प्रोसेसिंग रूटीन, समय और दिनांक रूटीन, और बहुत सारे टेक्स्ट प्रोसेसिंग बैश, sed / awk और Perl के साथ बनाया है। यूनिक्स यूटिलिटीज दुबले, तेज और लचीले होते हैं, और बैश उन्हें बहुत शक्तिशाली, आसान टूल में संयोजित करने का एक शानदार तरीका है।

मैं कभी-कभी एप्सस्क्रिप्ट से बैश लिपियों को कॉल करता हूं, आमतौर पर टेक्स्ट प्रोसेसिंग उद्देश्यों (जीआरईपी) के लिए या हल्की वेबसाइट लाने (घुमावदार) के लिए। मैं लगभग हमेशा इस तकनीक का उपयोग अपने एप्सस्क्रिप्ट में थोड़ा सा डेटा या वैरिएबल प्राप्त करने के लिए करता हूं।


आह, ये विशिष्ट उदाहरण बल्कि सहायक हैं। इसके लिए धन्यवाद। क्या आपके पास AppleScript के लिए किसी भी तरह के सुझाव दिए गए संसाधन हैं? एक पूर्ण शुरुआत के लिए। (मैंने अतीत में थोड़ी बैश स्क्रिप्ट का इस्तेमाल किया है और शायद वह खुद को इससे मुक्त कर सकती है।)
नोल्डोरिन

2
हां, जिस किताब से मुझे सबसे ज्यादा फायदा हुआ, वह थी मैट न्यूबर्गे की "AppleScript: द डेफिनिटिव गाइड।" Apple के डेवलपर प्रलेखन ठीक है, और संदर्भ के लिए परामर्श के लायक है, लेकिन Neuberg की पुस्तक काफी ईमानदारी से भाषा की ताकत और कमजोरियों दोनों का आकलन करती है। आप पाएंगे कि "प्राकृतिक" व्याकरण पर एप्सस्क्रिप्ट का आग्रह बहुत स्वाभाविक नहीं है, और कई मामलों में प्रतिवाद होगा। न्यूबर्गर स्पष्ट करता है कि कब और क्यों होता है।
ऐश

ठीक यही आभास मुझे शुरू में भाषा को देखने से मिला। मशीन और प्राकृतिक भाषाओं के बीच यह आधा-अधूरा घर अजीब लगता है। सिफारिश के लिए चीयर्स!
नोल्डोरिन

3

यह ओवरसाइम्प्लिफिकेशन हो सकता है, लेकिन शेल स्क्रिप्टिंग मौजूदा कार्यक्रमों के संयोजन के लिए नए कार्यों को करने के लिए है जबकि AppleScript दूर (ज्यादातर GUI) अनुप्रयोगों को नियंत्रित करना है। शास्त्रीय यूनिक्स कार्यक्रम आम तौर पर कुछ इनपुट पढ़ते हैं और कुछ आउटपुट और शेल स्क्रिप्टिंग का उत्पादन करते हैं जिससे आप उन्हें जोड़ सकते हैं। AppleScript GUI अनुप्रयोगों को स्वचालित करना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.