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?
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 Terminal
abre la Terminal con la primera ventana y do script
abre otra ventana (porque do script
se 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
mateusz szlosek
do script "myscript"
?usuario165602