Come faccio a creare un AppleScript che chiuderà un'applicazione in un momento specifico e quindi metterà il computer in sospensione?


8

Sono stato in giro con AppleScript e Automator per far funzionare questa cosa, ma non riesco proprio a pensarci bene. Se qualcuno potesse mostrarmi un esempio o darmi alcuni suggerimenti su come impostare un'applicazione in modo che si chiuda in un momento specifico e poi metta il computer in stato di sospensione o spegnimento, sarebbe molto apprezzato.


Vorresti che questo fosse fatto regolarmente o è qualcosa che vuoi avviare manualmente?
ephsmith l'

Hai già scritto AppleScript?
ephsmith l'

È qualcosa che vorrei fare regolarmente e non dovrei preoccuparmi di iniziare. Avevo una sceneggiatura scritta ma era piuttosto disordinata, quindi l'ho spazzata via e sono finita qui. Grazie per la tua risposta. Ci proverò e spero che chiarisca i problemi che ho avuto.
Tomás Richardson,

se si desidera che ciò avvenga regolarmente, la pianificazione del lavoro atnon è quella che si desidera. cronoppure launchd. Se vuoi un'interfaccia più semplice per configurarlo, forse lingon 3 ti aiuterà.
efsmith

Risposte:


14

Suppongo che desideri avviare questa procedura anziché averla eseguita in un orario regolarmente programmato.

Il mio approccio sarebbe quello di avviarlo dalla riga di comando, ma qualsiasi comando può essere eseguito in un componente script shell di uno script Automator con qualche modifica. Il seguente approccio combina alcuni componenti per completare il lavoro:

  1. Un tellcomando per chiudere l'applicazione
  2. Una chiamata da riga di comando per mettere il computer in modalità sospensione
  3. Una chiamata da riga di comando per pianificare 1 e 2 per un tempo specifico.

1. Dire all'applicazione di uscire

Questo può essere semplice come:

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

2. Sospensione del computer

Dai un'occhiata pmsetper maggiori dettagli, ma emettendo il seguente comando metterai il tuo computer in standby:

pmset sleepnow

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

Dai un'occhiata al comando at . Questo comando ti dà la possibilità di specificare un tempo per l'esecuzione di un comando. Dovrai abilitare questa funzionalità poiché non è di default. Per abilitare il atrundemone, eseguire il comando seguente [riferimento su SU] :

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

Una volta abilitato atrun, qualsiasi comando può essere programmato per un tempo specifico emettendo

echo "<command>" | at HH:MM

che funziona perché ataccetta l'input stdindi default. Un approccio più semplice consiste nell'eseguire i comandi elencati in un file. Un file può essere eseguito utilizzando il -fflag, seguito dal nome dello script da eseguire in questo modo:

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

Mettere tutto insieme

Ciò che segue presuppone che atrunsia abilitato. Ad esempio, diciamo che voglio uscire da Mail e mettere il computer in standby alle 23:00. Vorrei creare un file contenente i comandi che voglio eseguire come segue:

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

Salvare quel file quit-and-sleepe quindi eseguirlo dalla riga di comando

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

Avvertenze

Non ho fatto alcun controllo per assicurarmi che Mail fosse effettivamente chiuso. Lo script presuppone inoltre che nient'altro possa ostacolare la sospensione del computer. L'ho tenuto semplice qui come punto di partenza per ciò che desideri.


1

Ecco una versione rigorosamente applecript che realizza questo dato un valore temporale hard-coded. Ovviamente potresti rendere interattivo questa parte se vuoi. Inoltre, questa versione presuppone che la stringa temporale si riferisca 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

1

Puoi programmare un evento una volta con a:

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

O per programmarlo per ripeterlo ogni giorno, modifica il crontab con EDITOR=nano crontab -ee aggiungi una voce come questa:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow

alle 23:59 <<< 'osascript -e "esci dall'app \" Posta \ ""; pmset sleepnow 'non funziona per me. Dice "lavoro 1 a sab 30 aprile 12:47:00 2016" ma non esegue il comando quando arriva il momento
oluckyman

0

Ecco il codice che attenderà alcuni secondi prima di uscire dall'applicazione corrente e andare in modalità sospensione.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.