Birden çok terminal sekmesini açmak ve içinde kod yürütmek için nasıl komut dosyası yazabilirim?


8

Terminal uygulamasını açabilmek ve otomatik olarak birkaç sekmeyi açan bir komut dosyası çalıştırmak ve her birinde rastgele bir komut kümesi çalıştırmak istiyorum. Örneğin, bir sekme açmak, dizin değiştirmek ve bir raylar sunucusu çalıştırmak istiyorum; başka bir açık, dizinleri değiştirmek ve bir günlük dosyası kuyruk; vb..

Bunu bir kabuk betiği veya el yazısı ile yapmanın bir yolu var mı?

Bu soruyu buldum ama bitmeyen komutlarla sekmeleri açmak istiyorsam askıda görünüyor (raylar sunucusunu çalıştırmak gibi).

Yanıtlar:


5

Bu biraz acayip, ancak bunu AppleScript'te başarabilirsiniz. İstediğiniz önceden belirlenmiş sayıda sekme ve çalıştırmak istediğiniz önceden ayarlanmış komutlar varsa, bu zor değildir.

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

Tabii ki, firstCommandgerçekte hangi komutu çalıştırmak istediğinizi değiştirin, vb. Hangi nedenle olursa olsun, Terminal'in AppleScript aracılığıyla yeni sekmeler oluşturmak için gerçekten erişilebilir bir yolu yoktur, bu nedenle ortadaki uzun, çirkin görünümlü çizgi Terminal'e sadece Tyeni sekmeyi açmak için yazmasını söyler ve sonra yeni komutlar yürütülür.

Bu AppleScript'i olduğu gibi çalıştırabilir veya yeni bir hizmet oluşturmak için Automator'da kullanabilirsiniz; daha sonra isterseniz klavye kısayolunu kullanarak istediğiniz yerden çalıştırabilirsiniz.

Ekstralar - Eğer yeni açılan Terminal oturumunda bazı komut / komutu yangın istiyorsanız, başvurabilirsiniz bu


2

İşte hem Apple Terminali hem de iTerm (her ikisinin de kullanıcıları var) için istediğinizi yapacak bir kabuk betiği.

Açtığınız sekmeleriniz için bu, her sekmede tomcat için bir tane, sizin için db için bir tane gibi başka bir toplu iş dosyası yürütür.

#!/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

Yeni bir sekme açmak çok önemsiz olduğundan, komutlarınızın yürütülmesini olabildiğince önemsiz hale getirmenizi ve bunu eski moda bir şekilde yapmanızı öneririm.

İki özel işlem yaptınız, bu yüzden bunlarla çalışalım. Rails hakkında bildiklerime dayanarak çok fazla varsayım yapacağım, ancak projenize özgü olmayacağını unutmayın.

Uzun bir hikayeyi kısaltmak için, istediğinizi yapmak için bir komutu diğer ad olarak adlandırın veya istediğiniz şeyi yapmak için önemsiz bir kabuk komut dosyası oluşturun.

myapp.startİçeriği olan bir kabuk betiği oluşturun :

#!/bin/bash

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

Ayrıca büyük olasılıkla ana dizininizde .bash_profile adında bir dosya oluşturmanız veya zaten varolan bir dosyayı değiştirmeniz ve şöyle bir satır eklemeniz gerekir;

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

Ardından, ana klasörünüzde bir bin dizini oluşturun ve myapp.start betiğini bu dizine taşıyın. Ayrıca, sahibinin yürütme bitinin minimumda ( chmod 700 myapp.start) olduğundan emin olun .

Ardından, Terminal.app'ı açın, yazın myapp.startve çalışan raylarınız var. Alternatif olarak yazın ve myatuşuna basın Tabve otomatik tamamlamanın gerisini doldurmasına izin verin, tuşuna basın return. Boom, sunucu çalışıyor.

Uzantı olarak, bir günlük dosyası kuyruğunun nasıl yapılacağını zaten anlayabilirsiniz, ancak yine de devam edeceğim. ~ / Bin içinde myapp.taillog adlı başka bir dosya oluşturun.

#!/bin/bash

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

Yine, bin klasörüne yerleştirin, chmod 700 ~/bin/myapp.taillogardından başlattıktan sonra sunucuyu raylar, hızlı bir şekilde vurun t, yazın myapp.taillogve yazdırılan bir günlük dosyanız var.

İki komut, iki ek tuş vuruşu (sekmeleri açma), belki de yeterlidir?

Burada çok bariz iki gelişme var. Bunlardan biri, ray uygulamaları uygulamalarının adlarını "keşfedebilecek" bir kabuk işlevi yazmaktır, böylece her biri için bir kabuk komut dosyası yazmanıza gerek kalmaz, webbrick'i / seçtiğiniz ray sunucusunu başlatmak için tasarlanmış bir alt komut yazmanız ve kuyruk için komutlar -F'ing birkaç anahtar günlük dosyaları rutin.

İkinci gelişme, gerekli terminal etkileşimini ve her birinin içinde uygun komut yürütmesini yapan bir AppleScript yazabilmenizdir. Ama açıkçası, ben AppleScript emmek ve bash kodu ve perl kodu bütün gün çalışmak, bu yüzden beceri seti ile ilgili tavsiye sunuyoruz :).


1

Sorunuzun yazısına bağlı olarak Apple terminaline bağlı olsanız da, iTerm , birden fazla pencereyi komut dosyası yazmak ve yönetmek için varsayılan terminal emülatöründen üstündür.

Yer imleri kavramı, bir dizi pencerenin kolay yönetilmesini sağlar. Appleerm / Automater kullanarak iTerm'in komut dosyası oluşturmak , geliştiricinin web sitesinde daha basit, daha güçlü ve daha iyi belgelenmiştir . (terminale kıyasla)

İhtiyaçlarınızı karşılamayan normal terminal komut dosyası bulursanız bunu kontrol edin. Sıklıkla kullanılan komutlar için takma adlar ayarlamak üzere unix kabuğunuzu özelleştirmenizi de öneririz. Bunları yeni pencereler için ilk görevleri komut dosyasında kullanacaksınız, ancak aynı zamanda bir kabukta olduğunuzda ve yeni bir pencere açmak yerine görevleri değiştirmeniz gerekiyor.


1

Komut dosyaları güzel ve hepsi, ancak Terminal'i açtığınız bir 'Beni İzle' kaydetmek için Automator'ı da kullanabilir ve tercih ettiğiniz pencere sayısı için birkaç Command + N girebilirsiniz. Et voila.


1

Orada bir büyük cevap için çok benzer bir soru StackOverflow'daki üzerinde, ama sadece burada / makarna kopyalamak edeceğiz böylece muhtemelen, hemen buraya ait.


Bu kesinlikle mümkündür, ancak sizin tarafınızdan biraz çalışma gerektirecektir. İhtiyacınız olan ilk şey, Ayarlarınızda istediğiniz her pencereyi / sekmeyi ayarlamaktır.

Terminal'i her açışımda otomatik olarak açtığım 4 sekme var. DB Shell, Editor, ServerVe Shell. Bunların hepsi Sasquatch(sorma) projesi içinde yani isimlendirme. Bunların her birinin kendisiyle ilişkilendirilmiş benzersiz bir komutu olmalıdır.

Bu durumda, idam ediyorum vim. Başlamak istediğiniz belirli bir dizininiz varsa, benzer bir şey kullanabilirsiniz vim ~/projects/main/. Gerçekten gitmek istediğiniz her şey, kabuğun açıldığında yürüteceği komuttur. Şimdi tüm pencerelerinizi / sekmelerinizi açmanız gerekiyor:

  1. Her şeyi kapatın.
  2. Her profiliniz için yeni bir pencere açın.
    • Shell=> New Tab/ New Window=> Menüsüne gidin Yukarıda oluşturduğunuz profili seçin.
    • İstediğiniz her pencere veya sekme için tekrarlayın.
  3. Tüm pencerelerinizi ve / veya sekmelerinizi açtıktan sonra bir Pencere Grubu olarak kaydedin.
    • Git Windowmenüsü => Save Window As Group....
    • Pencere Grubunuza bir ad verin (bu daha sonra yardımcı olur).
    • Bu grubun Terminal'i her açışınızda açılmasını istiyorsanız, bu ekranın altındaki kutuyu işaretleyin ve ardından kaydet düğmesine basın.
  4. Tüm Windows / Sekmelerinizi kapatın (test etme zamanı!).
  5. Yeni Pencere Grubunuzu açın.
    • Git Windowmenüsü => Open Window Group=> Yeni yaptığınız grup seçin.

Bu, sahip olduğunuz tüm pencereleri aynı konumda açmalıdır. Ayarladığınız komutların her biri Settingsilgili sekmelerinde başlatılmalıdır.


1
Sadece bir not, cevabınızdaki Imageshack resim bağlantıları kopmuş gibi görünüyor.
Beporter

Maalesef, yeniden oluşturmak için resimlere veya eski ayarlar dosyasına sahip değilim. = - [
Jack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.