मैं कई टर्मिनल टैब खोलने और उनमें कोड निष्पादित करने के लिए स्क्रिप्ट कैसे लिख सकता हूं?


8

मैं टर्मिनल एप्लिकेशन को खोलने में सक्षम होना चाहता हूं और या तो यह स्वचालित रूप से एक स्क्रिप्ट चलाता है जो कई टैब खोलता है और प्रत्येक में एक मनमाना सेट चलाता है। उदाहरण के लिए, मैं एक टैब को खोलना, निर्देशिकाओं को बदलना और रेल सर्वर चलाना चाहूंगा; एक और खुला, निर्देशिका बदलें, और एक लॉग फ़ाइल को पूंछें; आदि..

क्या शेल स्क्रिप्ट या एप्सस्क्रिप्ट के साथ ऐसा करने का कोई तरीका है?

मुझे यह सवाल मिला, लेकिन अगर मैं समाप्त नहीं करना चाहता हूं, तो यह लटका हुआ लगता है (जैसे कि रैल सर्वर चलाना)।

जवाबों:


5

यह एक छोटा सा hacky है, लेकिन आप इसे AppleScript में हासिल कर सकते हैं। यदि आपके इच्छित टैब की एक पूर्व निर्धारित संख्या है, और प्रीसेट कमांड आप चलाना चाहते हैं, तो यह मुश्किल नहीं है।

tell application "Terminal"
    -- Activate it.
    activate

    set targetWindow to 0

    -- Get a window that's not busy.
    -- If there are no open windows, open one.
    if count of windows is greater than 0 then
        repeat with currentWindow in windows
            if currentWindow is not busy then
                set targetWindow to currentWindow
            end if
        end repeat
    else
        do script ""
        set targetWindow to window 1
    end if

    -- Do command 1.
    set firstCommand to "cd ~/Desktop; clear"
    do script firstCommand in targetWindow

    -- Open a new tab.
    tell application "System Events" to tell process "Terminal" to keystroke "t" using command down

    if count of windows is greater than 0 then
        repeat with currentWindow in windows
            if currentWindow is not busy then
                set targetWindow to currentWindow
            end if
        end repeat
    else
        do script ""
        set targetWindow to window 1
    end if

    -- Do command 2.
    set secondCommand to "cd /Applications; clear"
    do script secondCommand in targetWindow

    -- And so on...
end tell

बेशक, firstCommandजो भी आप वास्तव में चलाना चाहते हैं, और इसी तरह से बदलें । जो भी कारण से, AppleScript के माध्यम से नए टैब बनाने के लिए टर्मिनल के पास वास्तव में एक सुलभ तरीका नहीं है, इसलिए बीच में लंबी, हैकिंग लुकिंग लाइन टर्मिनल को Tउस नए टैब को खोलने के लिए टाइप करने के लिए कहती है , और फिर नए कमांड इसमें निष्पादित करेंगे।

आप इस AppleScript को चला सकते हैं, या एक नई सेवा बनाने के लिए इसे Automator में उपयोग कर सकते हैं, जिसे आप कीबोर्ड शॉर्टकट का उपयोग करके कहीं से भी निष्पादित कर सकते हैं यदि आप चाहें।

अतिरिक्त - आप नए खुले टर्मिनल सत्र में कुछ स्क्रिप्ट / कमांड सक्रिय करना चाहते हैं, तो आप उल्लेख कर सकते हैं इस


2

यहाँ एक शेल स्क्रिप्ट है जो आप चाहते हैं - Apple के टर्मिनल या iTerm (हमारे पास दोनों के उपयोगकर्ता हैं) के लिए।

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

#!/bin/bash

function tab () {
    local cmd=""
    local cdto="$PWD"
    local args="$@"

    if [ -d "$1" ]; then
        cdto=`cd "$1"; pwd`
        args="${@:2}"
    fi

    if [ -n "$args" ]; then
        cmd="; $args"
    fi

    if [ $TERM_PROGRAM = "Apple_Terminal" ]; then
        osascript 
            -e "tell application \"Terminal\"" \
                -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
                -e "do script \"cd $cdto; clear $cmd\" in front window" \
            -e "end tell"
            > /dev/null
    elif [ $TERM_PROGRAM = "iTerm.app" ]; then
        osascript
            -e "tell application \"iTerm\"" \
                -e "tell current terminal" \
                    -e "launch session \"Default Session\"" \
                    -e "tell the last session" \
                        -e "write text \"cd \"$cdto\"$cmd\"" \
                    -e "end tell" \
                -e "end tell" \
            -e "end tell" \
            > /dev/null
    fi
}

tab path_to_script1 sh script1
tab path_to_script2 sh script2
tab path_to_script3 sh script3

1

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

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

एक लंबी कहानी को छोटा करने के लिए, जो आप चाहते हैं, उसे करने के लिए एक आदेश को छोड़ दें या जो आप चाहते हैं वह करने के लिए एक तुच्छ शेल स्क्रिप्ट बनाएं।

myapp.startसामग्री के साथ नाम की एक शेल स्क्रिप्ट बनाएं :

#!/bin/bash

cd Development/rails/myapp
# Do any common environment initializations here, such as RAILS_ENV=development
script/server

आपको संभवतः अपने घर निर्देशिका में .bash_profile नाम की एक फ़ाइल बनानी होगी, या पहले से मौजूद एक को संशोधित करना होगा, और जैसे एक पंक्ति जोड़ना होगा;

export PATH="$HOME/bin:${PATH}"

फिर, अपने होम फ़ोल्डर में एक बिन डायरेक्टरी बनाएं, और उसमें myapp.start स्क्रिप्ट को स्थानांतरित करें। यह भी सुनिश्चित करें कि उसके पास न्यूनतम ( chmod 700 myapp.start) पर मालिक का साया है ।

उसके बाद, टर्मिनल खोलें। टाइप करें myapp.start, और आपके पास रेल चल रही है। वैकल्पिक रूप से, myaफिर टाइप करें Tab, और स्वतः पूर्ण को बाकी को भरने दें, दबाएँ return। बूम, सर्वर चल रहा है।

विस्तार से, आप पहले से ही समझ सकते हैं कि लॉग फ़ाइल पूंछ कैसे करें, लेकिन मैं वैसे भी जारी रखूंगा। सामग्री के साथ myapp.taillog नाम के ~ / बिन में एक और फ़ाइल बनाएँ:

#!/bin/bash

tail -F ~/Development/rails/myapp/logs/development.log

फिर से, इसे बिन फ़ोल्डर में रखें chmod 700 ~/bin/myapp.taillog, फिर शुरू होने के बाद सर्वर को फिर से शुरू करें, जल्दी से हिट करें t, टाइप करें myapp.taillog, और आपके पास एक लॉग फाइल प्रिंट हो रही है।

दो कमांड, दो अतिरिक्त कीस्टोक्स (टैब खोलना), शायद यह पर्याप्त है?

यहां दो बहुत स्पष्ट सुधार हैं। एक रेल फ़ंक्शन के नामों की "खोज" करने में सक्षम एक शेल फ़ंक्शन लिखना है, इसलिए आपको प्रत्येक के लिए एक शेल स्क्रिप्ट लिखना नहीं है, लेखन एक उप-कमांड वेबब्रिक / आपकी रेल के पसंद का सर्वर शुरू करने के लिए डिज़ाइन किया गया है, और टेल-फ़ाइंग के लिए कमांड कुछ प्रमुख लॉग फ़ाइलों को नियमित रूप से।

दूसरा सुधार यह है कि यह संभावना है कि आप एक AppleScript लिख सकते हैं जो आवश्यक टर्मिनल इंटरैक्शन और प्रत्येक के अंदर उपयुक्त कमांड निष्पादन करता है। लेकिन स्पष्ट रूप से, मैं AppleScript को चूसता हूं और पूरे दिन बैश कोड और पर्ल कोड में काम करता हूं, इसलिए मैं अपने कौशल के लिए प्रासंगिक सलाह दे रहा हूं :)।


1

हालाँकि, आप अपने प्रश्न के शब्दों के आधार पर Apple टर्मिनल से बंधे हो सकते हैं, iTerm कई विंडो को स्क्रिप्ट करने और प्रबंधित करने के लिए डिफ़ॉल्ट टर्मिनल एमुलेटर से बेहतर है।

बुकमार्क की अवधारणा विंडोज़ के एक सेट के आसान प्रबंधन की अनुमति देती है। AppleScript / Automater का उपयोग करके iTerm की स्क्रिप्टिंग डेवलपर की वेब साइट पर सरल, अधिक शक्तिशाली और बेहतर दस्तावेज है । (टर्मिनल की तुलना में)

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


1

लिपियाँ अच्छी हैं और सभी हैं, लेकिन आप ऑटोमेटर का उपयोग सिर्फ 'वॉच मी डू' रिकॉर्ड करने के लिए भी कर सकते हैं, जहाँ आप टर्मिनल खोलते हैं, और अपनी पसंदीदा # खिड़कियों के लिए कुछ कमांड + एन फेंक देते हैं। वेटिला।


1

StackOverflow पर एक बहुत ही इसी तरह के सवाल का एक शानदार जवाब है , लेकिन यह शायद अब यहाँ पर है, इसलिए मैं इसे यहाँ कॉपी / पास्ता करूँगा।


यह बिल्कुल संभव है, लेकिन यह आपके हिस्से में कुछ काम करेगा। आपको अपनी सेटिंग्स में प्रत्येक विंडो / टैब को सेट करना होगा।

मेरे पास 4 टैब हैं जो मैं टर्मिनल खोलते समय हर बार स्वचालित रूप से खोलता हूं। DB Shell, Editor, Server, और Shell। ये सभी Sasquatchइस परियोजना के नामकरण (पूछें नहीं) के भीतर हैं । इनमें से प्रत्येक के पास उनके साथ एक अद्वितीय कमांड होनी चाहिए।

इस मामले में, मैं निष्पादित कर रहा हूं vim। यदि आपके पास एक विशिष्ट निर्देशिका होना है, जिसे आप शुरू करना चाहते हैं, तो आप कुछ का उपयोग कर सकते हैं vim ~/projects/main/। वास्तव में आप जो भी वहां जाना चाहते हैं वह है कमांड खोलते ही खोल देगा। अब आपको अपनी सभी विंडो / टैब खोलने की आवश्यकता है:

  1. सब कुछ बंद कर दो।
  2. अपनी प्रत्येक प्रोफ़ाइल के लिए एक नई विंडो खोलें।
    • पर जाएं Shellमेनू => New Tab/ New Window=> प्रोफ़ाइल जो आपने ऊपर बनाया का चयन करें।
    • प्रत्येक विंडो या इच्छित टैब के लिए दोहराएं।
  3. एक बार जब आपके पास अपनी सभी खिड़कियां और / या टैब खुले हों, तो उन्हें विंडो ग्रुप के रूप में सहेजें।
    • पर जाएं Windowमेनू => Save Window As Group...
    • अपने विंडो ग्रुप को एक नाम दें (यह बाद में मददगार है)।
    • यदि आप चाहते हैं कि यह समूह हर बार जब आप टर्मिनल खोलते हैं, तो इस स्क्रीन के निचले भाग पर स्थित बॉक्स को चेक करें, और फिर सेव को हिट करें।
  4. अपने सभी विंडोज़ / टैब (इसे परीक्षण करने का समय!) से बाहर बंद करें।
  5. अपना नया विंडो ग्रुप खोलें।
    • Windowमेनू पर जाएं => Open Window Group=> आपके द्वारा बनाए गए समूह का चयन करें।

यह आपके पास बस, एक ही स्थिति में सभी खिड़कियों को पॉप अप करना चाहिए। आपके द्वारा सेट की गई प्रत्येक कमांड Settingsको उनके संबंधित टैब में लॉन्च किया जाना चाहिए।


1
बस एक नोट, आपके उत्तर में Imageshack छवि लिंक टूटे हुए प्रतीत होते हैं।
रिपोर्टर

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