Das Skript öffnet zwei Terminalfenster

Ich habe dieses kleine AppleScript mit Automator codiert :

tell application "Terminal"
do script "myscript"
end tell

Das funktioniert perfekt, hat aber einen Nebeneffekt: Wenn ich das Fenster schließe, muss immer das Terminal-Fenster geschlossen werden, also gibt es zwei Fenster, das eine, das das Skript ausführt, und das Terminal.

Gibt es eine Möglichkeit, nur ein Fenster laufen zu lassen?

Was passiert, wenn Sie nur machen do script "myscript"?
@Mateusz Szolsek: Ich erhalte eine Fehlermeldung

Antworten (3)

Versuchen:

tell application "Terminal"
    if not (exists window 1) then reopen
    activate
    do script "echo hi" in window 1
end tell

Sieht so aus, als ob das Terminal nicht geöffnet ist, dann tell application Terminaldas Terminal mit dem ersten Fenster öffnet und do scriptein anderes Fenster öffnet (weil do scriptein neues Fenster geöffnet werden soll).

Eine Teillösung ist do script ... in window 1, die die Ausführung des Skripts in einem kürzlich geöffneten Fenster erzwingt, aber wenn Terminal zuvor verwendet wurde, würde dies ein vorhandenes Fenster (und möglicherweise einen ungeeigneten Kontext) entführen.

Folgendes Skript hat den Trick für mich getan:

if application "Terminal" is running then 
    tell application "Terminal"   
        # do script without "in window" will open a new window        
        do script "echo HELLO"             
        activate                          
    end tell                              
else                                      
    tell application "Terminal"   
        # window 1 is guaranteed to be recently opened window        
        do script "echo HELLO" in window 1 
        activate
    end tell
end if 

(Ich habe mich von adayzdones Vorschlag inspirieren lassen , aber es hat bei mir nicht funktioniert (in El Capitan). Sieht so aus, als würde tell application "Terminal"die Bedingung not (exists window 1)nie anhalten.)

Ich weiß, das ist 5 Jahre zu spät, aber ich habe die Antwort gefunden.

Hier ist meine vereinfachte Antwort für Sie. Wechseln Sie ""zu meiner Skriptvariablen. Wir müssen zuerst das Terminal starten, um eine doppelte Fensterfehlerursache zu verhindern, indem wir das Erstellen eines neuen Fensters aktivieren, nachdem das Skript bereits ein neues Fenster erstellt hat. Wir können nicht davon ausgehen, dass wir nach der Aktivierung in Fenster 1 laufen können, da dieses Fenster geschlossen oder von einem anderen Prozess ausgeführt werden könnte. Die beste Lösung ist die, die ich geschrieben habe und die 0 Fehler hat:

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

Hier ist das vollständige Skript, das ich für mein offenes Terminal der Java-Bibliothek verwendet habe

on run argv
    set scpt to first item in argv
    set p to second item in argv
    tell application "Terminal"
        if not application "Terminal" is running then launch
        set newTab to do script scpt
        try
            if p is not equal to "" then set current settings of newTab to settings set p
        end try
        activate
    end tell
end run