Làm cách nào để tạo một tệp AppleScript hiện có để hoạt động như một dịch vụ?


11

Tôi đã tạo một AppleScript, lưu nó dưới dạng một tệp trong một thư mục cụ thể trên ổ cứng của tôi. Bây giờ tôi muốn gán một lối tắt cho nó và có vẻ như tôi phải tạo một Dịch vụ thông qua Automator, nhưng Run AppleScriptyêu cầu tôi đặt mã vào bên trong, trong khi tôi muốn thực thi tệp .scpt đã tồn tại. Làm thế nào để làm điều đó?

Câu trả lời:


9

Vâng, Automator là lựa chọn tốt nhất ở đây. Để tạo dịch vụ, hãy làm theo các bước sau:

  1. Mở Automator và chọn Dịch vụ:

    nhập mô tả hình ảnh ở đây

  2. Tìm kiếm 'applescript' và kéo hành động sang khung bên phải:

    nhập mô tả hình ảnh ở đây

  3. Thay đổi Service receives selected textđể Service receives no inputnó luôn xuất hiện trong menu Dịch vụ:

    nhập mô tả hình ảnh ở đây

  4. Thay thế (* Your script goes here *)bằng:

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

    nếu bạn muốn thực hiện .scpttập tin hiện tại của bạn . Lưu ý rằng osascript không thể xử lý tương tác người dùng như hiển thị cửa sổ hộp thoại:

    nhập mô tả hình ảnh ở đây

    Để khắc phục hạn chế này, hãy sử dụng cách giải quyết này hoặc đơn giản là thay thế (* Your script goes here *)bằng nội dung của tập lệnh của bạn.

  5. Lưu nó:

    nhập mô tả hình ảnh ở đây

  6. Nếu bạn muốn, bạn có thể chỉ định một phím tắt cho dịch vụ mới của bạn. Chọn Dịch vụ> Tùy chọn dịch vụ trong Finder (hoặc bất kỳ ứng dụng đang mở nào):

    nhập mô tả hình ảnh ở đây

  7. Chỉ định một shorcut không phổ biến:

    nhập mô tả hình ảnh ở đây

  8. Bây giờ dịch vụ của bạn có thể truy cập được từ bất kỳ ứng dụng nào thông qua phím tắt bạn đã chỉ định ở bước trước:

    nhập mô tả hình ảnh ở đây

Nếu bạn muốn thoát khỏi dịch vụ mở ~/Library/Services, hãy xóa dịch vụ và dọn sạch rác:

nhập mô tả hình ảnh ở đây


Tôi nói rằng tôi muốn thực thi tệp script hiện có, không phải viết lại vào Automator.
Nakilon

Tôi nghĩ rằng sao chép / dán sẽ ổn, nhưng vâng, bạn nói đúng, nó được nêu rõ trong câu hỏi của bạn. Sử dụng osascript, như được giải thích trong các câu trả lời khác.
jaume

@Nakilon Tôi đã thêm cách sử dụng osascripttrong Automator để chạy .scpttệp của bạn , một giới hạn và hai cách giải quyết.
jaume

Tôi chỉ làm điều này. Nó đã làm việc; nhưng, bây giờ phải mất 4 đến 5 giây để khởi chạy tập lệnh. (Khi mã được lưu trực tiếp trong quy trình làm việc, nó đã khởi chạy gần như ngay lập tức.) Bất kỳ ý tưởng nào gây ra điều này, hoặc làm thế nào để nó khởi chạy nhanh hơn?
Zack

1
@Zack Cảm ơn, tôi không biết tại sao osascriptcần thêm 4 giây để thực thi tập lệnh của mình, nhưng Automator không phải là nguyên nhân của sự chậm trễ, đó là mối quan tâm của tôi. Bạn có thể muốn gỡ lỗi osascript, xem opensourcehacker.com/2011/12/02/ trênstackoverflow.com/questions/31045575/iêu
jaume

4

Trong tập lệnh, thêm một on runđối số:

on run
    -- do whatever the script does
end run

Sau đó, bạn có thể sử dụng hành động "Chạy Shell Script" của Automator, với osascriptlệnh:

osascript /path/to/script.scpt

osascriptlà một lệnh thực thi AppleScript trong trình bao. Bạn cần các dòng trong tập lệnh để cho phép tập lệnh được thực thi bên ngoài trình soạn thảo AppleScript.


1
Bạn không cần phải bao gồm một trình xử lý chạy rõ ràng. Tất cả các kịch bản có một xử lý chạy ngầm. Lý do tại sao hành động AppleScript Run của Automator bao gồm trình xử lý chạy rõ ràng có thể là do Automator sử dụng on run {input, arguments}biểu mẫu đặc biệt , nhưng ngay cả trong Automator, bạn chỉ có thể xóa trình xử lý chạy.
Lri

1
@ Tôi tự hỏi nếu ping này đến với bạn. Kudos về lựa chọn tên sáng tạo.
bmike

3

Có lẽ bạn muốn xem Dịch vụ này , cho phép bạn "tạo các dịch vụ Mac OS X từ bất kỳ tập lệnh nào".


1
Bạn có thể cung cấp câu trả lời ở đây không chỉ là một liên kết
user151019

2

Tôi không khuyên bạn nên tạo dịch vụ Automator để gán phím tắt cho tập lệnh. Có một lỗi trong 10.7 và 10.8 trong đó các phím tắt cho dịch vụ Automator không luôn hoạt động cho đến khi bạn di chuột qua menu dịch vụ từ thanh menu. Ngoài ra còn có độ trễ tương đối dài (có thể 0,1 đến 1 giây) trước khi các dịch vụ được chạy.

Xem câu trả lời này để biết các cách khác để gán phím tắt cho tập lệnh. Tôi sử dụng FastScripts và Alfred.


Tôi chưa bao giờ trải nghiệm nhu cầu này để di chuột? bạn có biết thêm chi tiết về những gì bạn đang nói không
markhunte

1
Tôi không chắc liệu nó có ảnh hưởng đến tất cả các cài đặt OS X hoặc tất cả các dịch vụ hay không, nhưng tôi đã chạy nó nhiều lần trên các cài đặt khác nhau và nó đã được đề cập bởi những người khác ở đây và tại Super User. Đôi khi, các phím tắt cho tất cả các dịch vụ của Automator ngừng hoạt động (hoặc không có gì xảy ra nếu bạn nhấn chúng), nhưng chúng bắt đầu hoạt động trở lại nếu bạn di chuột qua menu dịch vụ từ thanh menu hoặc nếu bạn chọn một dịch vụ bằng chuột.
Lri

2

Bạn có thể CHẠY tập lệnh hiện có với một dịch vụ tự động đơn giản như thế này. Và chỉ định phím tắt của bạn từ bên trong bàn phím cắt ngắn như bình thường. Chỉ cần nhớ một số ứng dụng có thể cần phải được khởi chạy lại trước khi chúng chọn các phím tắt.

thí dụ.

kịch bản sayHello:

say "hello"

Dịch vụ tự động hóa: nhập mô tả hình ảnh ở đây

Mà trong ví dụ này sử dụng:

  • Không có đầu vào
  • Bất kỳ ứng dụng.

Hành động là Run Shell Script Mã chỉ sử dụng lệnh unix osascript và đường dẫn đến tệp. Vượt qua đầu vào có thể là stDN hoặc để tranh luận

Đó không có gì đặc biệt cần phải được thực hiện cho kịch bản.

Để biết thêm chi tiết về lệnh osascript, hãy xem các trang man cho nó. Trang man đưa ra một ví dụ khác, nơi bạn có thể chuyển các đối số cho tập lệnh.


0

Để phát triển Dịch vụ, bạn cần một số loại phần mềm sẽ tạo Dịch vụ, chẳng hạn như một trong những điều sau đây:

  1. Máy tự động để tạo một .workflow
  2. Dịch vụ này để tạo một dịch vụ.
  3. Xcode để tạo .app

Tất cả các loại dịch vụ trên là gói. Chúng là tất cả các thư mục chứa một danh sách chỉ định các thuộc tính của Dịch vụ.

Đây là cách tôi tạo Dịch vụ bằng Automator sử dụng hành động "Chạy AppleScript" để gọi một .script hiện có.

Dịch vụ tự động hóa gọi AppleScript hiện có

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.