El script abre dos ventanas de terminal

Codifiqué este pequeño AppleScript usando Automator :

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

Esto funciona perfectamente pero tiene un efecto secundario: cuando cierro la ventana, siempre queda la ventana de Terminal para cerrar, por lo que hay dos ventanas, la que ejecuta el script y la Terminal.

¿Hay alguna manera de tener una sola ventana en ejecución?

¿Qué sucede cuando sólo haces do script "myscript"?
@Mateusz Szolsek: Recibo un error

Respuestas (3)

Intentar:

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

Parece que cuando la Terminal no está abierta, luego tell application Terminalabre la Terminal con la primera ventana y do scriptabre otra ventana (porque do scriptse supone que abre una nueva ventana).

La solución parcial es do script ... in window 1, que obliga a ejecutar el script en una ventana abierta recientemente, pero cuando Terminal estaba en uso antes, esto secuestraría la ventana existente (y posiblemente un contexto inadecuado).

La siguiente secuencia de comandos hizo el truco para mí:

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 

(Me inspiré en la propuesta de adayzdone , pero no funcionó para mí (en El Capitán). Parece que después de tell application "Terminal"la condición not (exists window 1)nunca se mantiene).

Sé que esto es 5 años tarde, pero encontré la respuesta.

Aquí está mi respuesta simplificada para ti. Cambiar ""a mi variable de script. Primero debemos iniciar el terminal para evitar que se produzca un error de ventana duplicada activando la creación de una nueva ventana después de que el script ya haya creado una nueva ventana. No podemos asumir que podemos ejecutar en la ventana 1 después de la activación, ya que esa ventana podría cerrarse o ejecutarse desde otro proceso. La mejor solución es la que escribí y tiene 0 errores:

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

Aquí está el script completo que usé para mi terminal abierto de la biblioteca Java

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