Bagaimana cara membuat AppleScript yang akan keluar dari aplikasi pada waktu tertentu dan kemudian mematikan komputer?

8

Saya telah bermain-main dengan AppleScript dan Automator untuk mendapatkan hal ini untuk bekerja, tapi saya sepertinya tidak bisa membungkus kepala saya di sekitarnya. Jika ada yang bisa menunjukkan kepada saya contoh atau memberi saya beberapa tips tentang bagaimana saya dapat mengatur aplikasi untuk ditutup pada waktu tertentu dan kemudian mematikan atau mematikan komputer, itu akan sangat dihargai.

Tomás Richardson
sumber
Apakah Anda ingin ini dilakukan secara teratur atau ini sesuatu yang ingin Anda mulai secara manual?
ephsmith
Apakah Anda sudah menulis AppleScript?
ephsmith
Ini adalah sesuatu yang ingin saya lakukan secara teratur dan tidak perlu khawatir untuk memulai. Saya memang memiliki skrip yang ditulis tetapi sangat berantakan sehingga saya membuangnya dan berakhir di sini. Terima kasih atas jawaban anda. Saya akan mencobanya dan mudah-mudahan ini bisa menyelesaikan masalah yang saya alami.
Tomás Richardson
jika Anda ingin ini dilakukan secara teratur, maka menjadwalkan pekerjaan dengan atitu bukan yang Anda inginkan. cronatau launchd. Jika Anda ingin antarmuka yang lebih mudah untuk mengaturnya, mungkin lingon 3 akan membantu.
ephsmith

Jawaban:

14

Saya berasumsi bahwa Anda ingin memulai prosedur ini daripada menjalankannya pada waktu yang dijadwalkan secara teratur.

Pendekatan saya adalah memulai ini dari baris perintah, tetapi perintah apa pun dapat dijalankan dalam komponen skrip shell dari skrip Automator dengan beberapa modifikasi. Pendekatan berikut menggabungkan beberapa komponen untuk menyelesaikan pekerjaan:

  1. Sebuah tellperintah untuk keluar dari aplikasi
  2. Panggilan baris perintah untuk mematikan komputer
  3. Panggilan baris perintah untuk menjadwalkan 1 dan 2 untuk waktu tertentu.

1. Memberitahu Aplikasi untuk berhenti

Ini bisa sesederhana:

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

2. Menidurkan komputer

Lihatlah pmsetuntuk detail lebih lanjut, tetapi mengeluarkan perintah berikut akan membuat komputer Anda tidur:

pmset sleepnow

3. Menjadwalkan operasi yang akan dijalankan pada waktu tertentu

Lihatlah perintah at . Perintah ini memberi Anda kemampuan untuk menentukan waktu untuk menjalankan perintah. Anda harus mengaktifkan fungsi ini karena tidak secara default. Untuk mengaktifkan atrundaemon, jalankan perintah berikut [referensi pada SU] :

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

Setelah diaktifkan atrun, perintah apa pun dapat dijadwalkan untuk waktu tertentu dengan mengeluarkan

echo "<command>" | at HH:MM

yang berfungsi karena atmengambil input dari stdinsecara default. Pendekatan yang lebih sederhana adalah dengan menjalankan perintah yang tercantum dalam file. File dapat dieksekusi dengan menggunakan -fflag, diikuti dengan nama skrip yang akan dijalankan seperti ini:

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

Menyatukan semuanya

Berikut ini mengasumsikan bahwa atrunini diaktifkan. Sebagai contoh mainan, misalkan saya ingin keluar dari Mail dan mematikan komputer pada jam 11 malam. Saya akan membuat file yang berisi perintah yang ingin saya jalankan sebagai berikut:

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

Simpan file itu ke quit-and-sleepdan kemudian jalankan di baris perintah

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

Peringatan

Saya tidak melakukan pengecekan untuk memastikan bahwa Mail benar-benar ditutup. Script itu juga mengasumsikan bahwa tidak ada hal lain yang akan menghalangi komputer untuk tidur. Saya telah membuatnya sederhana di sini sebagai titik awal untuk apa yang Anda inginkan.

ephsmith
sumber
1

Berikut adalah versi ketat applescript yang menyelesaikan ini mengingat nilai waktu yang tersandi kode. Anda bisa, tentu saja membuat bagian ini interaktif jika Anda mau. Juga, versi ini mengasumsikan waktu-string berhubungan dengan hari ini.

--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
Paul Skinner
sumber
1

Anda dapat menjadwalkan acara satu kali dengan di:

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

Atau untuk menjadwalkannya diulang setiap hari, edit crontab dengan EDITOR=nano crontab -edan tambahkan entri seperti ini:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
Lri
sumber
pada 23:59 <<< 'osascript -e "berhenti app \" Mail \ ""; pmset sleepnow 'tidak bekerja untuk saya. Dikatakan "job 1 at Sat 30 Apr 12:47:00 2016" tetapi tidak menjalankan perintah ketika saatnya tiba
oluckyman
0

Berikut kode yang akan menunggu beberapa detik sebelum berhenti dari aplikasi saat ini dan akan tidur.

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