Bagaimana cara membuat file AppleScript yang ada berfungsi sebagai layanan?

11

Saya membuat AppleScript, menyimpannya sebagai file di folder tertentu pada hard drive saya. Sekarang saya ingin menetapkan cara pintas dan sepertinya saya harus membuat Layanan melalui Automator, tetapi Run AppleScriptmeminta saya untuk memasukkan kode di dalamnya, sementara saya ingin menjalankan file .scpt yang sudah ada. Bagaimana cara melakukannya?

Nakilon
sumber

Jawaban:

9

Ya, Automator adalah pilihan terbaik di sini. Untuk membuat layanan ikuti langkah-langkah ini:

  1. Buka Automator dan pilih Layanan:

    masukkan deskripsi gambar di sini

  2. Cari 'applescript' dan seret tindakan ke panel kanan:

    masukkan deskripsi gambar di sini

  3. Ubah Service receives selected textke Service receives no inputsehingga selalu muncul di menu Layanan:

    masukkan deskripsi gambar di sini

  4. Ganti (* Your script goes here *)dengan:

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    jika Anda ingin mengeksekusi .scptfile yang ada . Perhatikan bahwa osascript tidak dapat menangani interaksi pengguna seperti menampilkan jendela dialog:

    masukkan deskripsi gambar di sini

    Untuk mengatasi batasan ini, gunakan solusi ini atau cukup ganti (* Your script goes here *)dengan isi skrip Anda.

  5. Simpan itu:

    masukkan deskripsi gambar di sini

  6. Jika mau, Anda dapat menetapkan pintasan ke layanan baru Anda. Pilih Layanan> Preferensi Layanan di Finder (atau aplikasi terbuka apa pun):

    masukkan deskripsi gambar di sini

  7. Tetapkan shorcut yang tidak begitu umum:

    masukkan deskripsi gambar di sini

  8. Sekarang layanan Anda dapat diakses dari aplikasi apa pun melalui pintasan yang Anda tetapkan pada langkah sebelumnya:

    masukkan deskripsi gambar di sini

Jika Anda ingin menyingkirkan layanan terbuka ~/Library/Services, hapus layanan dan kosongkan tempat sampah:

masukkan deskripsi gambar di sini

Jaume
sumber
Saya bilang saya ingin menjalankan file skrip yang ada, bukan untuk menulisnya lagi ke Automator.
Nakilon
Saya pikir salin / tempel tidak apa-apa, tapi ya, Anda benar, dinyatakan dengan jelas dalam pertanyaan Anda. Gunakan osascript, sebagaimana dijelaskan dalam jawaban lain.
jaume
@Nakilon Saya telah menambahkan cara menggunakan osascriptdi Automator untuk menjalankan .scptfile Anda , batasan dan dua solusi.
jaume
Saya baru saja melakukan ini. Itu berhasil; tetapi, sekarang dibutuhkan 4 hingga 5 detik untuk meluncurkan skrip. (Ketika kode disimpan langsung dalam alur kerja, kode itu diluncurkan hampir seketika.) Adakah yang tahu penyebabnya, atau bagaimana membuatnya diluncurkan lebih cepat?
Zack
1
@ Zack Terima kasih, saya tidak tahu mengapa osascriptperlu 4 detik tambahan untuk menjalankan skrip Anda, tetapi Automator bukan penyebab keterlambatan, yang menjadi perhatian saya. Anda mungkin ingin men-debug osascript, lihat opensourcehacker.com/2011/12/02/… dan stackoverflow.com/questions/31045575/…
jaume
4

Dalam skrip, tambahkan on runargumen:

on run
    -- do whatever the script does
end run

Kemudian Anda dapat menggunakan tindakan Automator "Run Shell Script", dengan osascriptperintah:

osascript /path/to/script.scpt

osascriptadalah perintah yang mengeksekusi AppleScript di shell. Anda memerlukan baris dalam skrip untuk memungkinkan skrip dijalankan di luar editor AppleScript.

alexwlchan
sumber
1
Anda tidak perlu menyertakan run runler yang eksplisit. Semua skrip memiliki run handler implisit. Alasan mengapa tindakan Run AppleScript Automator termasuk run handler eksplisit mungkin karena Automator menggunakan on run {input, arguments}formulir khusus , tetapi bahkan dalam Automator Anda hanya dapat menghapus run handler.
Lri
1
@ ͏͏͏ Saya ingin tahu apakah ping ini cocok untuk Anda. Kudos pada pemilihan nama kreatif.
bmike
3

Mungkin Anda ingin melihat Layanan Ini , yang memungkinkan Anda untuk "membuat layanan Mac OS X dari skrip apa pun."

Peter
sumber
1
Bisakah Anda memberikan jawaban di sini dan bukan hanya tautan
user151019
2

Saya tidak akan merekomendasikan membuat layanan Automator untuk menetapkan cara pintas ke skrip. Ada bug di dalam 10.7 dan 10.8 di mana pintasan keyboard untuk layanan Automator tidak selalu berfungsi sampai Anda mengarahkan kursor ke menu layanan dari bilah menu. Ada juga penundaan yang relatif lama (mungkin 0,1 hingga 1 detik) sebelum layanan dijalankan.

Lihat jawaban ini untuk cara lain untuk menetapkan pintasan keyboard ke skrip. Saya menggunakan FastScripts dan Alfred sendiri.

Lri
sumber
Saya belum pernah mengalami kebutuhan ini untuk melayang? apakah Anda memiliki rincian lebih lanjut tentang apa yang Anda bicarakan
markhunte
1
Saya tidak yakin apakah ini memengaruhi semua instalasi OS X atau semua layanan, tetapi saya telah berkali-kali melakukannya pada instalasi yang berbeda, dan itu telah disebutkan oleh orang lain di sini dan di Super User. Kadang-kadang pintasan keyboard untuk semua layanan Automator berhenti berfungsi (atau tidak ada yang terjadi jika Anda menekannya), tetapi pintasan mulai bekerja jika Anda mengarahkan kursor ke menu layanan dari bilah menu, atau jika Anda misalnya memilih satu layanan dengan mouse.
Lri
2

Anda dapat MENJALANKAN skrip yang ada dengan layanan automator sederhana seperti ini. Dan tetapkan pintasan Anda dari dalam pintasan keyboard seperti biasa. Ingat saja beberapa aplikasi mungkin harus diluncurkan kembali sebelum mereka mengambil pintasan.

contoh.

skrip sayHello:

say "hello"

Layanan automator: masukkan deskripsi gambar di sini

Yang dalam contoh ini menggunakan:

  • Tidak ada input
  • Aplikasi apa pun.

Action adalah Run Shell Script . Kode hanya menggunakan perintah unix osascript dan path ke file. Masukan lulus dapat ke stdn atau ke argumen

Itu tidak ada yang perlu dilakukan untuk script.

Untuk perincian lebih lanjut tentang perintah osascript, lihat halaman manual untuknya. Halaman manual memberikan contoh lain di mana Anda bisa menyampaikan argumen ke skrip.

markhunte
sumber
0

Untuk mengembangkan Layanan, Anda memerlukan beberapa jenis perangkat lunak yang akan membuat Layanan seperti salah satu dari yang berikut:

  1. Automator untuk membuat alur kerja
  2. Layanan ini untuk membuat layanan
  3. Xcode untuk membuat .app

Semua jenis layanan di atas adalah paket. Itu semua adalah folder yang berisi daftar yang menentukan atribut-atribut Layanan.

Inilah cara saya membuat Layanan menggunakan Automator yang menggunakan tindakan Automator "Jalankan AppleScript" untuk memanggil skrip yang ada.

Layanan Automator yang Memanggil AppleScript yang Ada

Kaydell
sumber