Fenster mit iTerm programmatisch teilen?

6

Auf meiner Entwicklungs-Workstation muss ich oft jeden Morgen die gleichen Befehle starten.

zeus start, zeus server (Rails über Zeus booten), redis-serverund wie 3 andere.

Ich weiß, dass viele Leute sagen würden, dass sie die ganze Zeit am Laufen sind, aber ich arbeite viel an meinen eigenen Sachen und es bringt mich dazu, all diese zu haben, während ich an separaten Rail-Projekten arbeite.

Gibt es einen erweiterten Alias, den ich erstellen kann, der alle von einem Befehl aus startet, idealerweise durch programmgesteuertes Teilen des Fensters (wie z ⌘-D ).

Ich benutze iTerm2 mit oh-my-zsh.

Es würde mir nichts ausmachen, wenn sich alle im selben Fenster befinden, wie ich annehme (das läuft irgendwie als Hintergrundprozess), aber ich muss manchmal auf die Ausgabe schauen und mit der Ausgabe jedes Befehls arbeiten, also bin ich mir nicht sicher, wie das funktionieren würde .

Vielen Dank!

Tallboy
quelle

Antworten:

5

Sie können dies einfach von iTerm2 aus direkt aufrufen, um das Drücken zu simulieren D :

osascript -e 'tell application "System Events" to key code 2 using command down'

Damit dies funktioniert, möchten Sie die Programme im Hintergrund starten, da Sie sie sonst nicht ausführen können osascript:

some-command &
osascript -e '…'

Von da an landest du in einem neuen iTerm2-Fenster, also musst du das verwenden write text Option in AppleScript, um weitere Shell-Befehle auszuführen. Sehen Sie hier für mehr: Wie richte ich ein AppleScript ein, um eine neue iTerm2-Registerkarte zu öffnen und das Verzeichnis zu ändern?

slhck
quelle
Wow, das ist großartig! Wie würde ich das in mein Skript integrieren? Ich habe es mit & amp; & amp; und es hat nicht funktioniert, aber ich habe es wahrscheinlich falsch geschrieben.
Tallboy
Ich habe versucht, ein Skript mit nur diesem Befehl auszuführen und es von iTerm 2 aus zu starten (aus Zsh heraus, dasselbe Setup wie Sie), und es funktionierte ohne Probleme. Stellen Sie sicher, dass iTerm 2 aktiv ist, während der Befehl ausgeführt wird. Sie können auch versuchen, einzufügen tell application "iTerm" to activate; vor dem anderen tell Befehl nur um sicher zu gehen.
slhck
Entschuldigung, ich hätte das klären sollen. Das Skript selbst funktioniert perfekt, aber ich bin mir nicht sicher, wie ich es in einem großen zsh-Skript kombinieren soll, das im Grunde genommen funktioniert redis-server -> split -> other command -> split -> etc
Tallboy
Ah, ich verstehe, was du meinst. Da bist du in einem neuen Fenster (oder Split Panel) nachdem du das erste ausgeführt hast osascriptmüssen Sie weitere Befehle mit ausführen osascript - Ich habe meiner Antwort ein Beispiel hinzugefügt.
slhck
0

Die Antwort hier ist etwas veraltet. Hier ist ein Beispielskript, das etwas Ähnliches tut:

tell application "iTerm"
    tell current window
        -- create a tab for background db stuff
        create tab with default profile
        tell current session
            write text "mongod &"
            write text "redis-server &"
        end tell
        close current tab

        -- create tab to run aioc server
        create tab with default profile
        tell current session
            write text "title server"
            write text "aactivate"
            write text "arunserver"
            -- split tab vertically to run scheduler
            split vertically with default profile
        end tell

        -- run scheduler
        tell last session of last tab
            write text "title scheduler"
            write text "aactivate"
            write text "ascheduler"
            -- split tab vertically to run main controller
            split vertically with default profile
        end tell

        -- run main_controller
        tell last session of last tab
            write text "title main_controller"
            write text "aactivate"
            write text "amain_controller"
            -- split tab vertically to run aggregator
            split vertically with default profile
        end tell

        tell last session of last tab
            write text "title aggregator"
            write text "aactivate"
            write text "aggregator"
        end tell




    end tell
end tell
abbood
quelle
Hat sich einer der Befehle kürzlich mit Updates auf iterm und High Sierra geändert? Es passiert nichts, wenn ich versuche, mit der letzten Registerkarte zu kommunizieren. Iterm Build 3.1.5
Nick
Eigentlich muss ich Befehle aus der zurückgegebenen referenzierten Sitzung von ausführen split vertically with default profile . Auf diese Weise kann ich mit der geteilten Sitzung interagieren.
Nick
das hat funktioniert `` `#! / bin / sh tailBuildLog () {termCMD = $ (cat & lt; & lt; -END sag der Anwendung" iTerm ", sag der lokalen newSession des aktuellen Fensters, sag der aktuellen Sitzung, dass sie vertikal mit dem Standardprofilbefehl" tail -f "aufgeteilt wurde. / buildLogs / $ 1 "Ende erzählen Ende erzählen Ende erzählen END) osascript -e" $ termCMD "#echo" $ termCMD "#echo}` ``
Nick