AppleScript माउंट और अनमाउंट ड्राइव करने के लिए


0

यह इस साइट पर मेरी पहली पोस्ट है, इसलिए मुझे माफ करना अगर यह एक डबल पोस्ट है, लेकिन मुझे ऐसा कुछ नहीं मिला।

मैं मैकबुक प्रो 13 के शुरुआती 2011 में हूं, मैंने एक एसएसडी स्थापित किया है और एचडीडी को ऑप्टिबाय में स्थानांतरित कर दिया है, योसेमाइट की एक साफ स्थापना की है, मेरा दूसरा एचडीडी 1 टीबी है जहां मैं बैकअप बनाने से पहले अपना काम और डेटा स्टोर करता हूं। मैं घर हूँ।

मुझे हर समय hdd को माउंट करने की आवश्यकता नहीं है और मुझे ऊर्जा बचाने और उसे सुरक्षित रखने की आवश्यकता है, इसलिए मैंने इसे स्पॉटलाइट सर्च से हटा दिया, "sudo pmset -a disksleep 1" किया और दो एप्सस्क्रिप्ट, एक लॉन्च किया। सीधे hdd को अनमाउंट करने के लिए लॉगिन करें और दूसरा एक इजेक्ट कुंजी के माध्यम से लॉन्च किया जाए जिसे मैंने karabiner (पहले KeyRemap4MacBook के रूप में जाना जाता है) के साथ संशोधित किया

दूसरी स्क्रिप्ट एक संवाद लॉन्च करती है जो पासवर्ड मांगती है, फिर पूछती है कि क्या मैं hdd को एक्सेस करना चाहूंगा, यदि हां, तो hdd माउंट किया जाएगा, यदि नहीं, तो यह अनमाउंट होगा

समस्या यह है, कि मैंने देखा, कि अगर मैंने अपनी मैकबुक को बंद कर दिया है जबकि hdd माउंट किया गया है, डिस्क पहचानकर्ता को डिस्क 2 से डिस्क 1 में बदल जाता है और दोनों स्क्रिप्ट ssd को अनमाउंट करने की कोशिश करेंगे, इसलिए मुझे मैन्युअल रूप से अस्वीकार करना होगा hdd और पुनः आरंभ करें ताकि सब कुछ सामान्य हो जाए।

मैं जो करना चाहता हूं, वह स्क्रिप्ट को संशोधित करना है जो बेदखल कुंजी के माध्यम से लॉन्च करता है ताकि इसे पहले संवाद लॉन्च किया जा सके, बिल्कुल बंद डायलॉग की तरह, रद्द बटन को हटाने और "विस्तार" नामक एक बटन जोड़कर (जो कि नाम है hdd)।

मैं applescript के साथ एक नौसिखिया हूँ, तो यहाँ मैं क्या करना चाहता हूँ: उदाहरण

यदि Restart दबाया जाता है, तो hdd को अनमाउंट करें और
यदि Sleep दबाया गया है, तो पुनरारंभ करें , तो hdd और नींद को अनमाउंट करें
यदि शटडाउन दबाया गया है, तो hdd और शटडाउन को अनमाउंट करें
यदि विस्तार दबाया जाता है, तो पुरानी स्क्रिप्ट लॉन्च करें

यहां मेरी पुरानी स्क्रिप्ट है, नई स्क्रिप्ट उसके ठीक पहले आनी चाहिए

     set my_password to display dialog ¬
    "Allow access to Expansion" with title ¬
    "Expansion" with icon caution ¬
    default answer ¬
    "" buttons {"Cancel", "OK"} default button 2 ¬
    giving up after 295 ¬
    with hidden answer
if text returned of my_password is "password here" then

    set answer to the button returned of (display dialog "Allow access to Expansion?" with icon caution buttons {"Yes", "No"})

    if answer = "Yes" then
        do shell script "diskutil mountDisk disk2"
        tell application "Notifications Scripting"


            display notification "Expansion" subtitle "is now mounted" sound name "Blow"

        end tell
    else if answer = "No" then
        try

            do shell script "hdiutil eject disk2"

        on error

            tell application "System Events"
                set termOpen to count (processes whose name is "Terminal")
                set amOpen to count (processes whose name is "Activity Monitor")
            end tell


            tell application "Terminal"
                activate
                set newTab to do script "lsof /Volumes/'HFS HD'"
            end tell

            tell application "Activity Monitor"
                activate
            end tell

            delay 3

            set question to display dialog "Kill running?" buttons {"Yes", "No"} default button 2
            set answer to button returned of question

            if answer is equal to "Yes" then
                do shell script "lsof -P | grep '/Volumes/HFS HD'  | awk '{print $2}' | xargs kill -9"
                do shell script "hdiutil eject disk2"
            end if


            tell application "Activity Monitor"
                if amOpen is 0 then
                    quit
                end if
            end tell

            tell application "Terminal"
                if termOpen is 0 then
                    quit
                else
                    close (first window whose selected tab is newTab) saving no
                end if
            end tell



        end try
        tell application "Notifications Scripting"


            display notification "Expansion" subtitle "is now unmounted" sound name "Blow"

        end tell
    end if
else
    tell application "Notifications Scripting"


        display notification "A Goomba killed Mario!" subtitle "Next time, try jumping on it" sound name "Sosumi"

    end tell
    quit

end if

आपकी मदद के लिए धन्यवाद, और क्षमा करें यदि TLDR: पी


1
आपके अपने प्रश्न का उत्तर देने के लिए धन्यवाद! मैंने आपके शीर्षक से "हल" निकाला; कृपया blog.stackoverflow.com/2009/01/accept-your-own-answers चीयर्स देखें ।
अर्जन

जवाबों:


2

इसलिए, गुग्लिंग के 3 घंटे और कोशिश करने के बाद, मुझे एक समाधान मिला।

"डिस्कूटिल माउंटडिस्क डिस्क 2" और "हड्युटिल इजेक्ट डिस्क 2" के साथ hdd को माउंट करना और अनमाउंट करना एक BAD IDEA था, क्योंकि मुझे लगा कि डिस्क पहचानकर्ता बेतरतीब ढंग से बदलते रहते हैं, भले ही HDD अंतिम बन्द हो या नहीं, इसलिए स्क्रिप्ट नहीं। मैं जोड़ने की कोशिश कर रहा था बेकार।

मुझे जो समाधान मिला वह स्पष्ट रूप से यूयूआईडी था, शुरुआत में मैं इसे सही ढंग से काम करने के लिए नहीं मिला, लेकिन कई प्रयासों के बाद, सब कुछ ठीक काम करता है।

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

मेरी अंतिम स्क्रिप्ट:

set answer to the button returned of (display dialog “Mount the second HDD?” with icon caution buttons {"Yes", "No"})

if answer = "Yes" then
    do shell script "diskutil mount *YOUR UUID WITHOUT THE ASTERISK* ”

else if answer = "No" then
    try

        do shell script "diskutil unmount *YOUR UUID WITHOUT THE ASTERISK*"

    end try
end if

यदि डिस्क पहले से अनमाउंट है, तो संदेश दिखाने से बचने का प्रयास करें।

यही है, सरल और सटीक, आशा है कि यह भविष्य में मदद करता है

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