¿Cómo creo un AppleScript que cierre una aplicación en un momento específico y luego ponga la computadora en modo de suspensión?

8

He estado jugando con AppleScript y Automator para que esto funcione, pero parece que no puedo entenderlo. Si alguien me pudiera mostrar un ejemplo o darme algunos consejos sobre cómo puedo configurar una aplicación para que se cierre en un momento específico y luego poner la computadora en modo de suspensión o apagado, se lo agradecería enormemente.

    
pregunta Tomás Richardson 11.08.2012 - 13:48

4 respuestas

14

Supongo que le gustaría iniciar este procedimiento en lugar de ejecutarlo a una hora programada regularmente.

Mi enfoque sería iniciar esto desde la línea de comandos, pero cualquier comando puede ejecutarse en un componente de script de shell de un script de Automator con algunas modificaciones. El siguiente enfoque combina algunos componentes para realizar el trabajo:

  1. Un comando tell para salir de la aplicación
  2. Una llamada de la línea de comandos para poner la computadora en suspensión
  3. Una llamada de la línea de comandos a los horarios 1 y 2 para un tiempo específico.

1. Decirle a la aplicación que salga

Esto puede ser tan simple como:

osascript -e 'tell application "AppName" to quit'

2. Poner la computadora a dormir

Echa un vistazo a pmset para obtener más detalles, pero emitir el siguiente comando pondrá su computadora en suspensión:

pmset sleepnow

3. Programar una operación para que se ejecute a una hora específica

Eche un vistazo a en mando. Este comando le brinda la posibilidad de especificar un tiempo para que se ejecute un comando. Tendrá que habilitar esta funcionalidad ya que no es la predeterminada. Para habilitar el daemon atrun , ejecute el siguiente comando [referencia en SU] :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Una vez que haya habilitado atrun , cualquier comando puede programarse para un tiempo específico emitiendo

echo "<command>" | at HH:MM

que funciona porque at toma su entrada de stdin de forma predeterminada. Un enfoque más simple es ejecutar los comandos listados en un archivo. Se puede ejecutar un archivo utilizando el indicador -f , seguido del nombre del script que se ejecutará de la siguiente manera:

at -f /path/to/file HH:MM

Poniéndolo todo junto

Lo que sigue asume que atrun está habilitado. Como ejemplo de juguete, digamos que quiero salir de Mail y poner la computadora en modo de suspensión a las 11PM. Me gustaría crear un archivo que contenga los comandos que quiero ejecutar de la siguiente manera:

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

Guarde ese archivo en quit-and-sleep y luego ejecútelo en la línea de comando

at -f /path/to/quit-and-sleep 23:00

Caveats

No realicé ninguna comprobación para asegurarme de que Mail se haya cerrado. El script también supone que nada más impedirá que la computadora entre en modo de suspensión. Lo he mantenido simple aquí como punto de partida para lo que quieres.

    
respondido por el ephsmith 11.08.2012 - 17:32
1

Aquí hay una versión estrictamente de AppleScript que logra esto dado un valor de tiempo codificado. Usted podría, por supuesto, hacer esta parte interactiva si lo desea. Además, esta versión asume que la cadena de tiempo se relaciona con el día de hoy.

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell
    
respondido por el Paul Skinner 22.05.2013 - 21:24
1

Puedes programar un evento una vez con:

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

O para programarlo para que se repita todos los días, edite el archivo crontab con EDITOR=nano crontab -e y agregue una entrada como esta:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
    
respondido por el user495470 23.05.2013 - 00:37
0

Aquí hay un código que esperará una cantidad de segundos antes de salir de la aplicación actual e ir a dormir.

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
end tell
    
respondido por el imagophereatingapickle 08.08.2015 - 16:21

Lea otras preguntas en las etiquetas