शेल स्क्रिप्ट को खोलने के लिए ऑटोमेटर का उपयोग करें, टर्मिनल में आउटपुट देखें


3

मुझे एक छोटी सी समस्या है, जो मैक ओएस एक्स 10.8 माउंटेन लायन पर चल रही है।

मेरे पास एक स्क्रिप्ट (WebKit run-safari) है जो सफारी को देव मोड में लॉन्च करती है (यह कुछ पर्यावरणीय चर सेट करती है और फिर चलती है arch -x86_64 /Applications/Safari/Contents/MacOS/SafariForWebKitDevelopment)।

मैं इस स्क्रिप्ट को निम्नलिखित तरीकों से सुधारना चाहता हूं:

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

मैं स्वचालित, AppleScript और बैश स्क्रिप्ट के संयोजन से उन तीन में से किसी भी दो को प्राप्त करने में सक्षम हूं, लेकिन सभी तीन नहीं। क्या किसी के यहाँ कोई संकेत है?


यदि आप AppleScript फ़ाइल को सहेजते हैं, तो आप .scptबस इसे डबल-क्लिक कर सकते हैं। आप इसे एक ऑटोमेकर एप्लिकेशन के अंदर भी लपेट सकते हैं। आपके पास अब तक क्या स्क्रिप्ट है?
slhck

मुझे नहीं पता कि मैंने इसके बारे में पहले क्यों नहीं सोचा। मैंने एक नई टर्मिनल विंडो लॉन्च करने और उसमें रन-सफारी कमांड निष्पादित करने के लिए एक AppleScript बनाया। इसे नीचे पोस्ट किया है। अंतर्दृष्टि के लिए धन्यवाद!
int3h

जवाबों:


3

जैसा कि slhck द्वारा सुझाया गया है, मैंने एक स्टैंडअलोन AppleScript बनाया है जो इस कार्य को पूरा करता है, फिर इसे .app के रूप में AppleScript उपयोगिता में सहेजा है। यह वही करता है जो मैं चाहता हूं।

नीचे, स्क्रिप्ट ढूंढें। यह जाँचता है कि क्या SafariForWebKitDevelopment चल रहा है, टर्मिनल को स्क्रिप्ट को चलाने के लिए इसे लॉन्च करने के लिए कह रहा है यदि आवश्यक हो। (यह स्वचालित रूप से एक नई विंडो बनाता है, और मैं अपनी डिफ़ॉल्ट टर्मिनल नई विंडो सेटिंग्स को एक विंडो को बंद करने के लिए सेट करता हूं जब इसकी प्रक्रिया बाहर निकलती है।) फिर यह उस प्रक्रिया को शीर्ष विंडो बनाता है।

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

tell application "System Events"
    -- Only launch development Safari if it isn't already running
    if not (exists process "SafariForWebKitDevelopment") then
        tell application "Terminal"
            do script "run-safari; exit"
            activate
        end tell
    end if

    -- Max number of iterations of checking for process before
    -- we give up and exit the script (guards against errors in
    -- launching SafariForWebKitDevelopment, where the process
    -- would never exist, and this would be an infinite loop)
    set num_checks to 100
    -- Wait until dev Safari has launched
    repeat until (exists process "SafariForWebKitDevelopment")
        delay 0.1

        set num_checks to num_checks - 1
        if num_checks < 0 then
            return
        end if
    end repeat

    -- Set dev Safari to have focus
    -- 'tell application "Safari" to activate' doesn't work because AppleScript 
    -- has no way of discerning between multiple processes from the same .app
    -- bundle, so we can't be sure if we're talking to
    -- SafariForWebKitDevelopment, or an already-running normal Safari

    set frontmost of (process "SafariForWebKitDevelopment") to true
end tell
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.