Come creo un AppleScript che uscirà da un'applicazione in un momento specifico e poi metterà il computer in stato di stop?

8

Ho lavorato con AppleScript e Automator per far funzionare questa cosa, ma non riesco a capirlo. Se qualcuno potesse mostrarmi un esempio o darmi qualche consiglio su come posso impostare un'applicazione per chiudere in un momento specifico e poi mettere il computer in modalità sospensione o spegnimento, sarebbe molto apprezzato.

    
posta Tomás Richardson 11.08.2012 - 13:48
fonte

4 risposte

14

Suppongo che desideri avviare questa procedura anziché eseguirla a un orario pianificato regolarmente.

Il mio approccio sarebbe quello di iniziarlo dalla riga di comando, ma qualsiasi comando può essere eseguito in un componente script di shell di uno script di Automator con alcune modifiche. Il seguente approccio combina alcuni componenti per portare a termine il lavoro:

  1. Un comando tell per uscire dall'applicazione
  2. Una chiamata da riga di comando per mettere il computer in stop
  3. Una chiamata da riga di comando per pianificare 1 e 2 per un orario specifico.

1. Dire all'applicazione di uscire

Questo può essere semplice come:

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

2. Mettere il computer in stato di Stop

Dai un'occhiata a pmset per maggiori dettagli, ma inviando il seguente comando si metterà in stop il computer:

pmset sleepnow

3. Pianificazione di un'operazione da eseguire in un momento specifico

Dai un'occhiata a a comando. Questo comando ti dà la possibilità di specificare un tempo per l'esecuzione di un comando. Dovrai abilitare questa funzionalità in quanto non è predefinita. Per abilitare il demone atrun , esegui il seguente comando [riferimento su SU] :

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

Una volta attivato atrun , qualsiasi comando può essere programmato per un orario specifico emettendo

echo "<command>" | at HH:MM

che funziona perché at prende il suo input da stdin per impostazione predefinita. Un approccio più semplice consiste nell'eseguire i comandi elencati in un file. Un file può essere eseguito utilizzando il flag -f , seguito dal nome dello script da eseguire in questo modo:

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

Metti tutto insieme

Quanto segue presuppone che atrun sia abilitato. Come esempio di un giocattolo, diciamo che voglio chiudere Mail e mettere il computer in stop alle 23:00. Creo il file contenente i comandi che voglio eseguire come segue:

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

Salva quel file in quit-and-sleep e poi esegui sulla riga di comando

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

Avvertimenti

Non ho fatto alcun controllo per assicurarmi che Mail fosse effettivamente chiuso. Lo script presuppone anche che nient'altro possa ostacolare la sospensione del computer. L'ho mantenuto semplice qui come punto di partenza per quello che vuoi.

    
risposta data 11.08.2012 - 17:32
fonte
1

Ecco una versione rigorosamente AppleScript che realizza questo dato un valore temporale hard-coded. Potresti, ovviamente, rendere questa parte interattiva se vuoi. Inoltre, questa versione presuppone che la stringa del tempo si riferisca a oggi.

--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
    
risposta data 22.05.2013 - 21:24
fonte
1

Puoi pianificare un evento una volta con a:

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

Oppure pianificalo per ripetere ogni giorno, modifica il crontab con EDITOR=nano crontab -e e aggiungi una voce come questa:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
    
risposta data 23.05.2013 - 00:37
fonte
0

Ecco il codice che attenderà un certo numero di secondi prima di uscire dall'applicazione corrente e andare a dormire.

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
    
risposta data 08.08.2015 - 16:21
fonte

Leggi altre domande sui tag