ओएस एक्स डॉक से निष्पादित शेल लिपियों?


160

मैक OSX डॉक से निष्पादित करने के लिए मैं एक शेल स्क्रिप्ट कैसे सेट करूं? ऐसा लगता है कि बस एक शॉर्टकट बनाने से मेरे संपादक में फ़ाइल खुल जाएगी। क्या संपादन के लिए इसे खोलने के बजाय इसे चलाने के लिए मुझे बताने के लिए कहीं ध्वज स्थापित करने की आवश्यकता है?


2
पूरी तरह से अवतार के लिए +1 चाहिए, हालांकि मुझे विषय भी पसंद है।
मैट बैनर्ट

आप 2 के लिए स्विच स्वीकृत उत्तरों पर विचार करना चाह सकते हैं। मुझे लगता है कि यह एक बेहतर जवाब है।
ग्रे

जवाबों:


190

आप एक एकल चरण के साथ एक स्वचालित वर्कफ़्लो बना सकते हैं - "शेल स्क्रिप्ट चलाएँ"

फिर File > Save As, फ़ाइल प्रारूप को "एप्लिकेशन" में बदलें। जब आप एप्लिकेशन खोलते हैं, तो यह शेल स्क्रिप्ट स्टेप चलाएगा, कमांड को निष्पादित करेगा, इसे पूरा करने के बाद बाहर निकलेगा।

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

(स्वचालित आपके /Applicationsफ़ोल्डर में है!)

उदाहरण वर्कफ़्लो


6
@dbr, GUI बटन पुशर! :) बस मजाक कर रहे हैं, यह एक अच्छा सुझाव है!
११:२० बजे ११’०

हाँ, यह एक उत्कृष्ट सुझाव था :) मैंने अपने कुछ ऐप के लिए ऑटोमेकर एक्शन भी लिखा है और मैं अभी भी इस तरह से इसके बारे में भूल जाता हूं :)
जेसन कोको

मुझे यह नहीं मिल सकता है कि नोहाप के साथ काम करने के लिए, एक ला "nohup / usr / bin / myscript और; disown -a && से बाहर निकलें 0"। मुझे स्क्रिप्ट चलाने और तुरंत बाहर निकलने के लिए ऐप / वर्कफ़्लो की आवश्यकता है। कोई विचार? :-)
घंटेबैक

3
@martineau यदि आप आवेदन करके open -a SomeAppThing.app --args --etc=2इसे खोलते हैं तो इसे ध्यान केंद्रित करना चाहिए। वैकल्पिक रूप से आप इसे osascript -e 'tell application "Google Chrome" to activate'
एप्सस्क्रिप्ट

1
नोट: यदि आपकी स्क्रिप्ट GUI ऐप लॉन्च कर रही है, जो कुछ समय के लिए खुली रहेगी, तो यह टास्कबार में ऐप बंद होने तक लगातार घूमती हुई गियर आइकन दिखाएगा। चारों ओर एक काम है स्क्रिप्ट के लॉन्चिंग-लाइन में `&> / dev / null &` जोड़ना है ताकि ऑटोमेटर चारों ओर इंतजार न करे।
१:१३ को १२:१५

50

यदि आपको एक टर्मिनल विंडो की आवश्यकता नहीं है, तो आप किसी भी निष्पादन योग्य फ़ाइल को केवल शेल स्क्रिप्ट बनाकर Exampleऔर फ़ाइल नाम पर ले जाकर एक एप्लिकेशन बना सकते हैं Example.app/Contents/MacOS/Example। आप इस नए एप्लिकेशन को किसी भी अन्य की तरह अपनी गोदी में रख सकते हैं, और इसे एक क्लिक के साथ निष्पादित कर सकते हैं।

नोट: ऐप का नाम स्क्रिप्ट नाम से बिल्कुल मेल खाना चाहिए। इसलिए शीर्ष स्तर की निर्देशिका होनी चाहिए Example.appऔर Contents/MacOSउपनिर्देशिका में स्क्रिप्ट का नाम होना चाहिए Example, और स्क्रिप्ट को निष्पादन योग्य होना चाहिए।

यदि आपको टर्मिनल विंडो प्रदर्शित करने की आवश्यकता है, तो मेरे पास एक सरल समाधान नहीं है। आप शायद Applescript के साथ कुछ कर सकते हैं, लेकिन यह बहुत साफ नहीं है।


1
आपको पता नहीं है कि क्या शेल स्क्रिप्ट में तर्क के रूप में फाइल पास करने का एक आसान तरीका है? "ओपन विथ ..." का उपयोग करके खोली गई फ़ाइलों के लिए।
फज्यो Jun76

9
ऐसा करने की कोशिश करने वाले किसी भी व्यक्ति के लिए - ऐप का नाम स्क्रिप्ट के नाम से मेल खाना चाहिए। तो यह वास्तव में होना चाहिए example.sh.app, न कि सिर्फ example.app। यदि ये मेल नहीं खाते हैं तो आपको क्षतिग्रस्त ऐप के बारे में चेतावनी मिल जाएगी
किप

1
स्पष्ट करने के लिए - मैं एक OSX noob हूँ - आप का मतलब सिर्फ एक फ़ोल्डर संरचना बनाना है जैसे कि आपके उदाहरण में दिखाए गए स्क्रिप्ट फ़ाइल के साथ दिखाया गया है?
मार्टिन

2
@martineau हाँ, यह सही है। यदि आप एक फ़ोल्डर बनाते हैं जिसका नाम .appउस संरचना में और उसके साथ समाप्त होता है , तो इसे एक निष्पादन योग्य अनुप्रयोग के रूप में माना जाएगा। यदि आप फाइंडर में उस फ़ोल्डर की सामग्री को देखना चाहते हैं, तो आपको उस पर राइट क्लिक करना होगा और "व्यू पैकेज कंटेंट" का चयन करना होगा (क्योंकि इस पर डबल क्लिक करने से एप्लिकेशन चलेगा)। टर्मिनल में, यह केवल एक फ़ोल्डर प्रतीत होगा। (मुझे यकीन नहीं है कि यदि खोजक आपको फ़ोल्डर को अपने द्वारा .app नाम देने देगा, तो आपको टर्मिनल में नाम बदलने की आवश्यकता हो सकती है।)
जेरेमी बैंक्स

1
मैंने अभी-अभी यह प्रयास किया, और एल कैपिटान (10.11) में एक त्रुटि प्राप्त की: "आप नहीं खोल सकते .... क्योंकि पावरपीसी एप्लिकेशन अब समर्थित नहीं हैं।" : डी यह काफी दिलचस्प है!
एलन हेन

26

OSX Mavericks पर:

  1. अपनी शेल स्क्रिप्ट बनाएं।
  2. अपनी शेल स्क्रिप्ट को निष्पादन योग्य बनाएं:

    chmod +x your-shell-script.sh
  3. .appप्रत्यय लगाने के लिए अपनी स्क्रिप्ट का नाम बदलें :

    mv your-shell-script.sh your-shell-script.app
  4. स्क्रिप्ट को OSX डॉक पर खींचें।
  5. अपनी स्क्रिप्ट का नाम .shप्रत्यय पर वापस रखें :

    mv your-shell-script.app your-shell-script.sh
  6. फ़ाइल को फाइंडर में राइट-क्लिक करें, और "गेट इन्फो" विकल्प पर क्लिक करें।
  7. विंडो के निचले भाग में, टर्मिनल के साथ खोलने के लिए शेल स्क्रिप्ट सेट करें।

अब जब आप डॉक में स्क्रिप्ट पर क्लिक करते हैं, तो एक टर्मिनल विंडो पॉप अप होगी और आपकी स्क्रिप्ट निष्पादित करेगी।

बोनस: जब आपकी स्क्रिप्ट पूरी हो गई है, तब टर्मिनल को बंद exit 0करने के लिए, अंत में जोड़ें और टर्मिनल सेटिंग्स को "शेल को बंद करें यदि स्वच्छ रूप से बाहर निकलता है" जैसे कि यह एसओ उत्तर में ऐसा करने के लिए कहता है ।


अच्छा, यह मेरे लिए काम किया, किसी भी तरह से आइकन को आश्चर्यचकित करने का मौका दिया। FYI करें: ALso स्टेप 7 फ़ाइल का जिक्र कर रहा है न कि मेन्यू आइटम का ...
माइक Q

अच्छा तरीका है! खुले टर्मिनल के साथ सभी .sh
IHTCboy

@ stiemannkj1, क्या ऐप चलते समय यह आइकन दिखाता है? वैसे भी क्या इसे छिपाने के लिए?
पचेरियर

@Pacerier, क्षमा करें, मैं अब OSX पर नहीं हूं (लिनक्स पर स्विच किया गया :))। आप जेरेमी बैंक के जवाब की कोशिश करना चाह सकते हैं । मेरे पास कोई अन्य विचार नहीं है और चूंकि मेरे पास OSX नहीं है, इसलिए मैं कुछ भी करने और आइकन को दिखाने / छिपाने के लिए परीक्षण या गड़बड़ नहीं कर सकता हूं ..
stiemannkj1

17

मुझे पता है कि यह पुराना है, लेकिन अगर यह दूसरों के लिए उपयोगी है:

यदि आपको स्क्रिप्ट चलाने और टर्मिनल को पॉप अप करने की आवश्यकता है, तो आप परिणाम देख सकते हैं जैसे आप कर सकते हैं जैसे एबिस नाइट ने कहा और एक्सटेंशन को .command में बदल दें। यदि आप इस पर डबल क्लिक करते हैं तो यह एक टर्मिनल विंडो खोलेगा और चलेगा।

हालांकि मुझे ऑटोमेकर या ऐप्पस्क्रिप्ट से चलाने के लिए इसकी आवश्यकता थी। तो एक नया टर्मिनल खोलने के लिए इसे "रन शैल स्क्रिप्ट" से चलाने की कमांड "myShellScript.command" खोलें और यह एक नए टर्मिनल में खुली।


अद्भुत, धन्यवाद! अब सभी को यह सुनिश्चित करने की आवश्यकता है कि स्क्रिप्ट के पूरा होने पर टर्मिनल विंडो को बंद करने का एक सही समाधान होगा।
पीटर एम।

1
यदि आपके पास टर्मिनल प्राथमिकताओं में चयनित निकास पर बंद खिड़की है तो आप अपनी स्क्रिप्ट में निकास कमांड जोड़ सकते हैं और आपके पास वही होगा जो आप चाहते हैं।
बजे जेसन थोलस्ट्रप सिप

7

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

यदि आप एक एक्सटेंशन (जैसे foo.sh) चाहते हैं, तो आप फाइंडर में फ़ाइल जानकारी विंडो पर जा सकते हैं और उस विशेष स्क्रिप्ट के लिए डिफ़ॉल्ट एप्लिकेशन को बदल सकते हैं जो कुछ भी है (TextEdit, TextMate, जो भी आपके कंप्यूटर पर डिफ़ॉल्ट के लिए सेट है) .sh फ़ाइलें) टर्मिनल के लिए। यह एक पाठ संपादक में खोलने के बजाय बस निष्पादित करेगा। फिर, आपको इसे डॉक के दाईं ओर खींचना होगा।


1
नोट : यह OS X 10.10 Yosemite में एक विजेता की तरह काम करता है। मैं १०.९ पर टिप्पणी नहीं कर सकता
ब्रायन ऐश

1
10.11 को काम करता है। धन्यवाद!
यासीन इमौनाचेन

10.12 को भी काम करता है! शायद 10.9 के बारे में मेरी टिप्पणी गलत थी, लेकिन मैंने देखा कि आपको यह सुनिश्चित करने की आवश्यकता है कि आप इसे विभाजक के नीचे गोदी के हिस्से तक खींच लें। मेरे पास 10.9 दुर्भाग्य से फिर से परीक्षण करने का कोई तरीका नहीं है।
stiemannkj1 18

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

5

मुझे लगता है कि यह धागा मददगार हो सकता है: http://forums.macosxhints.com/archive/index.php/t-8309.html

विरोधाभास के लिए, आप इसे .command एक्सटेंशन के साथ नाम बदल सकते हैं या शेल चलाने के लिए AppleScript बना सकते हैं।


हिम तेंदुए पर कम से कम, एक स्क्रिप्ट में .command एक्सटेंशन को जोड़ने पर यह टर्मिनल में चलता है यदि आप इसे डबल-क्लिक करते हैं, लेकिन किसी कारण से आप अभी भी इसे गोदी में नहीं खींच सकते। dbr और जेरेमी के सुझाव दोनों मेरे लिए काम करते थे, हालाँकि।
जो लेस

5

जैसा कि जॉय ने उल्लेख किया है, शेल स्क्रिप्ट बनाना और फिर शेल स्क्रिप्ट को कॉल करने के लिए एक अप्प्लस्क्रिप्ट स्क्रिप्ट बनाना, इसे पूरा करेगा, और काफी उपयोगी है।

शैल लिपि

  1. अपने पसंदीदा टेक्स्ट एडिटर में अपनी शेल स्क्रिप्ट बनाएं, उदाहरण के लिए:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (यह मोनो फ्रेमवर्क का उपयोग करके w32 निष्पादन योग्य है)

  2. मेरे उदाहरण "StartKeepass.sh" के लिए शेल स्क्रिप्ट सहेजें

Apple स्क्रिप्ट

  1. AppleScript एडिटर खोलें, और शेल स्क्रिप्ट को कॉल करें

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - बाह्य शेल कमांड को कॉल करने के लिए एप्सस्क्रिप्ट टाइप करें
    • "sh ...." - यह आपके शेल स्क्रिप्ट (पूर्ण पथ) को चरण एक में बनाया गया है (आप डायरेक्ट कमांड भी चला सकते हैं, मैं शेल स्क्रिप्ट को छोड़ सकता हूं और बस यहां मेरी मोनो कमांड चला सकता हूं)
    • user name - आप एक विशिष्ट उपयोगकर्ता के रूप में कमांड को चलाना चाहते हैं, जो एपलस्क्रिप्ट को घोषित करता है
    • "<enter username here> - अपने उपयोगकर्ता नाम के साथ बदलें (उद्धरण रखते हुए) पूर्व "जोश"
    • password - अपने पासवर्ड को अपील करने की घोषणा करता है
    • "<enter password here>" - अपने पासवर्ड के साथ बदलें (उद्धरण रखते हुए) पूर्व "mypass"
    • with administrative privileges - घोषित करता है कि आप एक व्यवस्थापक के रूप में चलाना चाहते हैं

अपना .APP बनाएं

  1. मेरे नाम RunKeepass.scpt में filename.scpt के रूप में अपनी एपलस्क्रिप्ट सहेजें

  2. इस रूप में सहेजें ... आपकी एप्सस्क्रिप्ट और फ़ाइल स्वरूप को अनुप्रयोग में बदल दें, जिसके परिणामस्वरूप मेरे मामले में RunKeepass.app

  3. अपने एप्लिकेशन फ़ाइल को अपने एप्लिकेशन फ़ोल्डर में कॉपी करें


5

स्क्रिप्ट एडिटर में:

do shell script "/full/path/to/your/script -with 'all desired args'"

एप्लिकेशन बंडल के रूप में सहेजें।

जब तक आप सब करना चाहते हैं, स्क्रिप्ट का असर देखने को मिलेगा, यह ठीक काम करेगा। आप STDOUT या STDERR नहीं देखेंगे।


2
मेरा सुझाव है: "एक आवेदन के रूप में सहेजें BUNDLE"। बंडल अनुप्रयोगों की तुलना में बहुत तेज़ी से लॉन्च होते हैं।
ई.जेम्स

-3

किसी ने लिखा ...

मैंने अभी टर्मिनल के साथ खोलने के लिए ".sh" में समाप्त होने वाली सभी फाइलें सेट की हैं। यह ठीक काम करता है और आपको प्रत्येक शेल स्क्रिप्ट का नाम नहीं बदलना है जिसे आप चलाना चाहते हैं।

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