वर्तमान स्थान में एक नया टर्मिनल विंडो खोलने के लिए एप्सस्क्रिप्ट


14

हां, मुझे Apple स्क्रिप्ट के साथ एक भयानक नौसिखिया अनुभव हो रहा है।

मुझे वर्तमान डेस्कटॉप स्थान में एक नई टर्मिनल विंडो खोलने की आवश्यकता है। मुझे दूसरे स्थान पर न ले जाएं, जिसमें एक टर्मिनल चल रहा हो और फिर दूसरी टर्मिनल विंडो खोलें।

बेशक, अगर टर्मिनल नहीं चल रहा है तो उसे एक नई टर्मिनल प्रक्रिया शुरू करनी चाहिए।

जवाबों:


18
tell application "Terminal"  
    do script " "  
    activate  
end tell

यह अजीब लगता है लेकिन यह एक विषमता का लाभ उठाता है कि कैसे टर्मिनल आने वाली "स्क्रिप्ट" कमांड को संभालता है; यह प्रत्येक के लिए एक नई विंडो बनाता है। यदि आप चाहते हैं कि आप वास्तव में कुछ उपयोगी के साथ बदल सकते हैं; यह नई विंडो खोलने के बाद आप जो चाहते हैं उसे निष्पादित करेंगे।


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

15

यदि आपके पास do स्क्रिप्ट के बीच कोई पाठ नहीं है "" तो आपको टर्मिनल में एक अतिरिक्त कमांड प्रॉम्प्ट नहीं मिलेगा।

tell application "Terminal"  
    do script ""  
    activate  
end tell

1
मुझे लगता है कि यह ठीक है अगर हम इसे एक उत्तर के रूप में छोड़ देते हैं - आप वैकल्पिक रूप से इसे बेहतर बनाने और इसे हटाने के लिए @ jfm के उत्तर पर एक संपादन का सुझाव दे सकते हैं।
slhck

8

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

OS X में निर्मित स्क्रिप्ट के विपरीत, कम से कम 10.10 के बाद, ये सभी आपके खोजक विंडो में वर्तमान कार्यशील निर्देशिका में टर्मिनल को खोलते हैं (अर्थात इसे खोलने के लिए आपके पास एक फ़ोल्डर नहीं होना चाहिए)।

फ़ाइंडर> टर्मिनल> फ़ाइंडर सर्कल को पूरा करने के लिए कुछ बैश फ़ंक्शंस भी शामिल हैं।

1. किसी मौजूदा टैब का पुनः उपयोग करें या एक नई टर्मिनल विंडो बनाएं:

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if (exists window 1) and not busy of window 1 then
        do script "cd " & quoted form of myDir in window 1
    else
        do script "cd " & quoted form of myDir
    end if
    activate
end tell

2. किसी मौजूदा टैब का पुनः उपयोग करें या नया टर्मिनल टैब बनाएं:

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if not (exists window 1) then reopen
        activate
    if busy of window 1 then
        tell application "System Events" to keystroke "t" using command down
    end if
    do script "cd " & quoted form of myDir in window 1
end tell

3. प्रत्येक बार एक शेल स्क्रिप्ट के माध्यम से एक नई विंडो उत्पन्न करें जिसे एप्सस्क्रिप्ट से कहा जाता है

tell application "Finder"
    set myDir to POSIX path of (insertion location as alias)
    do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell

4. (BONUS) अपने टर्मिनल में वर्तमान कार्यशील निर्देशिका के लिए एक नई खोजक विंडो खोलने के लिए बैश उर्फ

इस उपनाम को अपने .bash_profile में जोड़ें।

alias f='open -a Finder ./' 

5. (बोनस) सामने की खोजक खिड़की के रास्ते में अपनी टर्मिनल विंडो में निर्देशिका बदलें

इस फ़ंक्शन को अपने .bash_profile में जोड़ें।

cdf() {
      target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
        if [ "$target" != "" ]; then
            cd "$target"; pwd
        else
            echo 'No Finder window found' >&2
        fi
}

0

यदि टर्मिनल पहले से ही चल रहा है, तो ऊपर दिए गए उत्तर ही काम करते हैं। अन्यथा यह एक ही बार में दो टर्मिनल विंडो खोलता है - एक की वजह से do scriptऔर एक की वजह से activate

आप इसे एक साधारण से रोक सकते हैं यदि ... और:

if application "Terminal" is running then
    tell application "Terminal"
        do script ""
        activate
    end tell
else
    tell application "Terminal"
        activate
    end tell
end if

बक्शीश:

यदि आप सीधे कमांड चलाना चाहते हैं तो आप कीस्ट्रोक्स के माध्यम से ऐसा कर सकते हैं (बहुत सुरुचिपूर्ण नहीं - मुझे पता है! लेकिन यह काम करता है)

[...]
else
    tell application "Terminal"
        activate
        tell application "System Events" to keystroke "ls -la" 
        tell application "System Events" to key code 36
    end tell
end if
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.