AppleScript se ejecuta de nuevo después de un reinicio que inició. ¿Cómo evitar eso?

Tengo un script de shell que ejecuta una aplicación AppleScript. Ese script de shell reinicia la máquina en algún momento con shutdown -r now.

¿Cómo puedo evitar que la aplicación AppleScript se inicie automáticamente de nuevo después del reinicio?

  • La aplicación no está incluida en los elementos de inicio.
  • La aplicación se inicia de nuevo como cualquier otra aplicación abierta cuando el script de shell reinicia OS X

La secuencia es esta:

  1. Hago doble clic en la aplicación AppleScript
  2. AppleScript lanza un script de shell en Terminal
  3. El script de shell, en algún momento, reinicia el sistema
  4. La aplicación AppleScript se inicia de nuevo después del reinicio
Necesita más información... ¿cómo se inicia la aplicación ahora? ¿Agregaste la aplicación a tus elementos de inicio?
Cuando reinicia manualmente, ¿ha activado (marcado) "volver a abrir ventanas al volver a iniciar sesión"?

Respuestas (4)

Haga que su AppleScript escriba un archivo vacío en una ubicación predefinida y pruebe su existencia cuando se inicie el script. Si el archivo ya está allí, elimínelo y salga del script; de lo contrario, proceda con normalidad y reinicie.

Puede intentar redirigir el comando de shell con

do shell script "insert_your_command &>/dev/null &"

y luego decirle a su aplicación que salga

EDITAR
También puede agregar un retraso antes de redirigir el comando.

 do shell script "(sleep 5 ; insert_your_command) &>/dev/null &"
Es posible que la aplicación no tenga tiempo para cerrarse. Tal vez haga que el script de shell lo cierre con osascript -e 'dígale a la aplicación "Editor de scripts" que se cierre' antes de que se apague. Pero aún debe separar el script de Shell con el final &, o se eliminará cuando la aplicación se cierre.
Se debe indicar a la aplicación AppleScript del OP que se cierre, no al "Editor de secuencias de comandos".

Supongo que OS X está restaurando el estado de la aplicación Apple Script después de que se reinicia. Posiblemente podría intentar que Apple Script elimine su propio estado de aplicación justo antes del comando de reinicio, aunque no he verificado que esto funcione o sea posible. Debe estar ubicado en ~/Library/Saved Application State/.

No creo que AppleScript pueda saber cuándo eliminar su estado antes del reinicio, ya que el reinicio se inicia a través de un comando de shell.
Pero como dijiste, el script de shell lo ejecuta la aplicación Applescript. ¿La aplicación sigue abierta cuando se ejecuta el script de shell? Si es así, podría estar restaurando su estado al reiniciar.
Sí, la aplicación aún está abierta cuando se inicia el script de shell (en una ventana de Terminal)

Ok lo encontre

El script de shell necesitaba tener las siguientes líneas:

osascript -e 'tell app "System Events" to restart'
killall "Terminal"

Los comandos de shell anteriores inician el reinicio a través de un comando de Apple Script ad hoc, pero cierran la Terminal inmediatamente después. Esto tiene el efecto de salir de la aplicación Apple Script justo antes de que lo haga el proceso de reinicio de OS X. Por lo tanto, OS X no incluye la aplicación Apple Script en la lista de aplicaciones abiertas que deben volver a abrirse después del reinicio.

Dos efectos secundarios de usar este método:

  • reiniciar a través de ese comando Apple Script le da al usuario la oportunidad de guardar el trabajo no guardado de las aplicaciones abiertas, a diferencia del shutdown -r nowcomando Shell que fuerza un reinicio inmediato.
  • La terminal aún se cierra abruptamente, lo que puede ser un problema si los procesos se ejecutan en otras ventanas/pestañas de la Terminal