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?
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 Terminal
das Terminal mit dem ersten Fenster öffnet und do script
ein anderes Fenster öffnet (weil do script
ein 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
Mateusz Szlosek
do script "myscript"
?Benutzer165602