डबल क्लिक करके OS X में शेल स्क्रिप्ट कैसे चलाएं?


233

मेरे पास एक शेल स्क्रिप्ट है जिसमें ओएस एक्स पर उपयोगकर्ता निष्पादन की अनुमति है, लेकिन जब मैं इस पर डबल क्लिक करता हूं, तो यह एक पाठ संपादक में खुलता है। मैं इसे डबल-क्लिक करके कैसे चला सकता हूं?

जवाबों:


266
  • पहले टर्मिनल में टाइप करके स्क्रिप्ट को निष्पादन योग्य बनाएं:

    chmod a+x (yourscriptname)
  • फिर, फाइंडर में, अपनी फ़ाइल पर राइट-क्लिक करें और "ओपन विथ" और फिर "अन्य ..." चुनें।

  • यहां आप उस एप्लिकेशन का चयन करते हैं जिसे आप फ़ाइल में निष्पादित करना चाहते हैं, इस मामले में यह टर्मिनल होगा। टर्मिनल का चयन करने में सक्षम होने के लिए आपको "अनुशंसित एप्लिकेशन" से "सभी एप्लिकेशन" पर स्विच करना होगा। (यूटिलिटीज फोल्डर में Terminal.app एप्लिकेशन पाया जा सकता है)

  • ध्यान दें कि जब तक आप टर्मिनल में चलाने के लिए इस एक्सटेंशन के साथ सभी फाइलों को जोड़ना नहीं चाहते हैं, तब तक आपको "ऑलवेज ओपन विथ" चेक नहीं करना चाहिए।

  • ओके पर क्लिक करने के बाद आपको स्क्रिप्ट को केवल डबल क्लिक करके निष्पादित करना चाहिए।

धन्यवाद मुझे मिल गया, मैं टर्मिनल के साथ
जुड़ना

22
जब तक मुझे एहसास नहीं हुआ कि मुझे "यूटिलिटीज" फोल्डर में देखना है, तब तक मैं इस सूची में Terminal.app नहीं पा सका । उम्मीद है कि यह कुछ समय किसी को बचाएगा।
ग्लेन लॉरेंस

27
OSX 10.8 और उच्चतर पर, एक निष्पादन योग्य स्क्रिप्ट, जिसके नाम में कोई प्रत्यय या प्रत्यय नहीं .commandहै , फाइंडर से डिफ़ॉल्ट निष्पादन योग्य है, फाइंडर को निर्देश देने की आवश्यकता के बिना कि इसे कैसे खोलें।
mklement0

1
"सभी अनुप्रयोग" वह सेटिंग है जो मुझे याद आ रही थी ... शायद चेरुविम ने भी क्या अनुभव किया। ग्लेन की टिप्पणी के लिए: आप विंडो के ऊपरी-दाएँ कोने में बिल्ड-इन सर्च सुविधा का उपयोग कर सकते हैं; सुनिश्चित करें कि आप एप्लिकेशन का पूरा नाम टाइप करें।
बड़े बुजुर्ग

3
इसे करने का साफ तरीका नहीं। .commandफ़ाइल एक्सटेंशन में अपनी स्क्रिप्ट का नाम बदलें ।
बचसु

227

क्या आपने .commandफ़ाइल नाम एक्सटेंशन का उपयोग करने की कोशिश की है ?


3
यह बेहतर है। @Lus उत्तर में कार्यशील फ़ोल्डर वही नहीं है जो आप स्क्रिप्ट खोलते हैं।
रॉड्रिगो

6
क्या कोई कंसोल विंडो के साथ "पृष्ठभूमि" कार्यों को लॉन्च करने का एक तरीका है?
लैपो

6
कृपया ध्यान दें, हो सकता है कि वर्तमान निर्देशिका आपकी स्क्रिप्ट पर स्थित न हो। इस प्रश्न को सही तरीके से सेट करने के लिए इस पर एक नज़र डालें: stackoverflow.com/questions/59895/…
Pavel Alexeev

14
आपको अभी भी निष्पादन अनुमति ( chmod +x) की आवश्यकता है, लेकिन .commandविस्तार पहले से ही टर्मिनल से जुड़ा हुआ है। महान समाधान, धन्यवाद
NorTicUs

जाहिरा तौर पर उपयोगकर्ता इस विधि के साथ टर्मिनल कार्यक्रम के साथ बातचीत नहीं कर सकता है - जब तक कि मैं गलत नहीं हूं?
डेमिस

153

OSX 10.10 (योसेमाइट) और चूंकि कम से कम OS X 10.8 (माउंटेन लायन) , व्यवहार तब होता है जब आप फाइंडर से निष्पादन योग्य स्क्रिप्ट खोलते हैं (डबल-क्लिक करते हैं) :

  • निष्पादन योग्य स्क्रिप्ट [1] या तो किसी प्रत्यय या प्रत्यय के.command साथ नहीं :
    • कर रहे हैं मार डाला डिफ़ॉल्ट रूप से - कोई सेटअप की आवश्यकता :
      • एक नई टर्मिनल विंडो खुलती है जिसमें स्क्रिप्ट चलती है।
      • डिफ़ॉल्ट रूप से, स्क्रिप्ट समाप्त होने के बाद विंडो खुली रहेगी ताकि आप आउटपुट का निरीक्षण कर सकें (हालांकि उस बिंदु पर जो शेल चला गया है जो स्क्रिप्ट से बाहर हो गया है और आप उसके साथ अब और बातचीत नहीं कर सकते हैं )।
        हालांकि, टर्मिनल के माध्यम से Preferences... > Profilesआप स्क्रिप्ट से बाहर निकलने पर विंडो को स्वचालित रूप से बंद करने का विकल्प चुन सकते हैं ।
    • कैविएट : काम करने वाला फोल्डर वास्तव में वर्तमान उपयोगकर्ता का होम फोल्डर है , न कि वह फ़ोल्डर जिसमें स्क्रिप्ट स्थित है।
      • शेल स्क्रिप्ट को उस फ़ोल्डर में बदलने के लिए जिसमें वह स्थित है, जगह है
        • cd -- "$(dirname "$BASH_SOURCE")" शबंग लाइन के ठीक बाद
        • या, यदि आप, POSIX अनुरूप ही रहना चाहिए cd -- "$(dirname "$0")"
        • किनारे के मामलों के लिए, जैसे कि एक सिम्प्लाइड स्क्रिप्ट का असली स्रोत निर्देशिका खोजना , मेरा यह उत्तर देखें ।
    • यदि स्क्रिप्ट अप्रत्याशित रूप से निष्पादन योग्य नहीं है :
      • chmod +x <script>टर्मिनल में चलाकर इसे निष्पादन योग्य बनाएं ; अन्यथा, आपको निम्न लक्षण दिखाई देंगे:
      • .command: खोजक एक भ्रामक त्रुटि संदेश प्रदर्शित करता है जो सुझाव देता है कि समस्या को ठीक किया जा सकता है File > Get Info, जो कि सत्य नहीं है - chmod +xऊपर वर्णित विधि का उपयोग करें ।
      • कोई प्रत्यय नहीं:
        • साथ एक कुटिया लाइन (जैसे, #!/bin/bash): व्यवहार है के रूप में यदि प्रत्यय रहे थे .sh- नीचे देखें।
        • शेबबैंग लाइन के साथ नहीं : आपके डिफ़ॉल्ट टेक्स्ट एडिटर में खुलता है (जो कि डिफ़ॉल्ट रूप से टेक्स्टएडिट है)।
  • प्रत्यय के.sh साथ लिप्यांतर , निष्पादन योग्य है या नहीं:
    • कर रहे हैं के लिए खोला संपादन में TextEdit.appया, यदि स्थापित है, के साथ Xcode.app
  • प्रत्यय के.scpt साथ या .applescript(भले ही वे खुद को निष्पादन योग्य के रूप में चिह्नित कर रहे हों, जो सामान्य रूप से मामला नहीं है):
    • में संपादन के लिए खोला गया[Apple]Script Editor
    • ध्यान दें कि JXA स्रोत-कोड फ़ाइलों में कोई विशेष प्रत्यय (अभी तक) नहीं है।
  • साथ स्क्रिप्ट एक कस्टम प्रत्यय (एक प्रत्यय अभी तक व्यवस्था करने के लिए नहीं जाना जाता है), निष्पादन योग्य है या नहीं (वास्तव में, फ़ाइल के किसी भी प्रकार के लिए लागू होता है):
    • संकेत आप उन लोगों के साथ खोलने के लिए ऐप्लिकेशन के लिए जब आप पहली बार उन्हें खोलने , और कि चुनाव याद

[१] निष्पादन योग्य का अर्थ है: निष्पादन योग्य अनुमति बिट (एस) के साथ एक स्क्रिप्ट जो सेट और कॉलिंग उपयोगकर्ता - फ़ाइल के स्वामित्व के सापेक्ष - इसलिए संभवतः इसे निष्पादित करने की अनुमति दी जा रही है।
आप का उपयोग करते हैं chmod a+xस्थापित करने के लिए सभी अनुमति बिट्स (जो आम है), किसी को भी यह आह्वान कर सकते हैं (यह मानते हुए वे भी करने की अनुमति है पढ़ के आधार पर फ़ाइल पढ़ने की अनुमति बिट (रों) और फ़ाइल के स्वामित्व)।


1
खुली हुई टर्मिनल विंडो को बंद करना संभव है जब स्क्रिप्ट सरल से बाहर निकलती है osascriptतो आप .commandप्रोफ़ाइल के साथ मैन्युअल रूप से गड़बड़ करने के बजाय फ़ाइल के भीतर शामिल कर सकते हैं ।
l'L'l

@ मैं कर रहा हूँ: क्या तुम मतलब osascript -e '...'है एक स्क्रिप्ट के अंत में एक कमांड जोड़ने ? विशिष्ट कमांड क्या है, और क्या यह सुनिश्चित करता है कि स्क्रिप्ट के सबसे सामने वाले टैब में न चलने पर भी राइट टैब बंद हो?
mklement0

5
@ mklement0: हां, मैंने इसे कुछ मिनटों से अधिक परीक्षण नहीं किया है, लेकिन मूल विचार .command स्क्रिप्ट की अंतिम पंक्ति में शामिल करने के लिए है : osascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 &... यह हर परिदृश्य में काम नहीं कर सकता है, हालांकि रीडायरेक्ट। अंत वास्तव में महत्वपूर्ण है - ओसस्क्रिप्ट को अन्यथा आसानी से अनुकूलित किया जा सकता है (जैसे कि विंडो को टैब में बदलने की आवश्यकता हो सकती है यदि वह आपका टर्मिनल डिफ़ॉल्ट व्यवहार है, आदि)।
l'L'l

क्या .commandप्रोफाइल सेटिंग के बावजूद स्क्रिप्ट फ़ाइल के चलने के बाद टर्मिनल विंडो / टैब को बंद नहीं करना संभव है ?
साइबरएम

@CyberMew: यदि आप स्क्रिप्ट को संशोधित कर सकते हैं, तो एक कमांड जोड़ें जो अंत में एक कीस्ट्रोक की प्रतीक्षा करता है; उदाहरण के लिए, यदि यह एक bashस्क्रिप्ट है, read -p 'Press Return to close this window.'तो अंतिम विवरण के रूप में जोड़ें ।
mklement0

38

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


यह वास्तव में एक शानदार ऐप है। लेकिन मुझे यहाँ कुछ समस्या है। मेरे पास एक पायथन स्क्रिप्ट है जिसे मैं एक .app फ़ाइल में बदलना चाहता हूं। मेरी स्क्रिप्ट में एक पंक्ति शामिल होती है जहाँ उपयोगकर्ता को कुछ इनपुट (raw_input ()) टाइप करना होता है, जब .app कोड की इस पंक्ति तक पहुँचता है, तो यह एक EOF (फ़ाइल का अंत) त्रुटि फेंकता है। मैं इसमें क्या कर सकता हूँ?

1
यह एक इंटरैक्टिव टर्मिनल नहीं है। प्लैटिपस केवल स्क्रिप्ट आउटपुट प्रस्तुत करता है। कोई द्विदिश संचार नहीं है।
sv

4
या रन शैल स्क्रिप्ट एक्शन का उपयोग करके ऑटोमेटर के साथ एक ओएस एक्स एप्लिकेशन बनाएं।
रंगी कीन

15

आसान तरीका यह है कि आप एक्सटेंशन को एक्सटेंशन में बदलें .commandया न करें।

लेकिन यह टर्मिनल खोल देगा, और आपको इसे बंद करना होगा। यदि आप कोई आउटपुट नहीं देखना चाहते हैं, तो आप मैक एप्लिकेशन बनाने के लिए ऑटोमेटर का उपयोग कर सकते हैं जिसे आप डबल क्लिक, डॉक में जोड़ सकते हैं, आदि।

  1. Automatorएप्लिकेशन खोलें
  2. "एप्लिकेशन" प्रकार चुनें
  3. क्रियाएँ खोज बॉक्स में "रन" टाइप करें
  4. डबल क्लिक करें "रन शैल स्क्रिप्ट"
  5. Runपरीक्षण करने के लिए ऊपरी दाएं कोने में स्थित बटन पर क्लिक करें ।
  6. File > Save अनुप्रयोग बनाने के लिए।

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


महान ! हम दैनिक 1 बजे चलाने के लिए इस वर्कफ़्लो को स्वचालित कैसे कर सकते हैं?
अक्षय

9

प्लैटिपस जैसे तीसरे पक्ष के ऐप का उपयोग करने की आवश्यकता नहीं है।

बस स्क्रिप्ट एडिटर के साथ एक ऐप्पल स्क्रिप्ट बनाएं और do shell script "shell commands"डायरेक्ट कमांड कॉल या निष्पादन योग्य शेल स्क्रिप्ट फ़ाइलों के लिए कमांड का उपयोग करें, संपादन योग्य स्क्रिप्ट फ़ाइल को कहीं सुरक्षित रखें और फिर इसे एप्लिकेशन स्क्रिप्ट बनाने के लिए निर्यात करें। ऐप स्क्रिप्ट बार फ़ोल्डर में डबल क्लिक या चयन द्वारा लॉन्च-सक्षम है।


3
इससे भी बेहतर, ऑटोमेटर का उपयोग करें और एप्पल स्क्रिप्ट के माध्यम से जाने के बजाय सीधे रन शैल स्क्रिप्ट कार्रवाई का उपयोग करें।
रंगी कीन

0

आप RCDefaultApp का उपयोग करके फ़ाइल एक्सटेंशन द्वारा डिफॉल्ट भी सेट कर सकते हैं:

http://www.rubicode.com/Software/RCDefaultApp/

संभावित रूप से आप iTerm / Terminal आदि में खोलने के लिए .sh को सेट कर सकते हैं, इसके लिए उपयोगकर्ता की अनुमति की आवश्यकता होगी, जैसे

chmod u+x filename.sh

RCDefaultApp प्रीफ पेन


0

chmod 774 filename

नोट : बैश स्क्रिप्ट वाले 'फ़ाइल नाम' वाली फ़ाइल का कोई विस्तार नहीं है

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