Як створити AppleScript, який закриє програму в певний час, а потім переведе комп'ютер у режим сну?


8

Я розгулювався з AppleScript і Automator, щоб змусити цю справу працювати, але я просто не можу обернути голову навколо цього. Якщо хтось міг би показати мені приклад або дати мені поради щодо того, як я можу налаштувати програму, щоб закритись у певний час, а потім перевести комп'ютер у режим сну або вимкнення, це буде дуже вдячно.


Ви хочете, щоб це робилося регулярно чи це щось, що ви хочете ініціювати вручну?
ephsmith

У вас вже написаний AppleScript?
ephsmith

Мені б хотілося це робити регулярно, і не потрібно турбуватися про ініціювання. У мене був написаний сценарій, але він був дуже безладним, тому я його розбив і закінчив тут. Дякую за вашу відповідь. Я піду на це, і, сподіваюся, він вирішить проблеми, які у мене виникли.
Tomás Richardson

якщо ви хочете, щоб це робилося регулярно, тоді планування роботи atне є тим, що ви хочете. cronабо launchd. Якщо ви хочете простіший інтерфейс для налаштування, можливо , допоможе lingon 3 .
ephsmith

Відповіді:


14

Я припускаю, що ви хочете ініціювати цю процедуру, а не запускати її у регулярно запланований час.

Мій підхід полягав би в тому, щоб ініціювати це з командного рядка, але будь-які команди можуть бути запущені в компоненті сценарію оболонки сценарію Automator з деякою модифікацією. Наступний підхід поєднує в собі кілька компонентів, щоб виконати роботу:

  1. tellКоманда , щоб вийти з програми
  2. Виклик командного рядка, щоб перевести комп'ютер у режим сну
  3. Виклик командного рядка для планування 1 та 2 на певний час.

1. Повідомлення програми закрити

Це може бути так само просто, як:

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

2. Переведення комп'ютера спати

Погляньте на pmsetдокладнішу інформацію, але видання наступної команди переведе комп'ютер у режим сну:

pmset sleepnow

3. Планування операції, яку слід запустити у визначений час

Погляньте на команду at . Ця команда дає вам змогу вказати час виконання команди. Вам потрібно буде включити цю функціональність, оскільки вона за замовчуванням не є. Щоб увімкнути atrunдемон, запустіть таку команду [посилання на SU] :

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

Після включення atrunбудь-яку команду можна запланувати на певний час, видавши

echo "<command>" | at HH:MM

яка працює, тому що atприймає його stdinза замовчуванням. Більш простий підхід - запускати команди, перелічені у файлі. Файл може бути виконаний за допомогою -fпрапора з наступним іменем сценарію, який запускається так:

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

Збираючи все це разом

Далі передбачається, що atrunце включено. Як приклад іграшки, скажімо, що я хочу вийти з пошти та перевести комп'ютер спати в 11:00. Я створив би файл, що містить команди, які я хочу запустити так:

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

Збережіть цей файл, quit-and-sleepа потім запустіть у командному рядку

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

Коваджі

Я не робив жодної перевірки, щоб переконатися, що Пошта справді закрита. Сценарій також передбачає, що більше нічого не заважає увімкнути комп'ютер спати. Тут я простий, як відправна точка для того, що ви хочете.


1

Ось суворо аплептична версія, яка виконує це з урахуванням важко кодованого значення часу. Звичайно, ви можете зробити цю частину інтерактивною, якщо хочете. Також ця версія передбачає, що часовий рядок стосується сьогоднішнього дня.

--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

Ви можете запланувати подію один раз за допомогою:

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

Або запланувати його для повторення кожного дня, відредагуйте crontab EDITOR=nano crontab -eта додайте запис таким чином:

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

о 23:59 <<< 'osascript -e "закрити додаток \" Пошта \ ""; pmset sleepnow 'не працює для мене. У ньому написано "робота 1 в сб 30 квітня 12:47:00 2016", але не виконується команда, коли настане час
олукіман

0

Ось код, який зачекає кількість секунд, перш ніж вийти з поточної програми та перейти до сну.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.