Tập lệnh AppleScript so với Bash?


13

Tôi là một "người sử dụng năng lượng" Windows lâu năm và nhà phát triển gần đây đã quyết định chuyển sang Mac OS X.

Trên OS X Lion và các phiên bản thực sự trước đó dường như có hai tùy chọn chính cho kịch bản và tự động hóa trong OS X: AppleScript và Bash script. Cái sau tất nhiên là hậu quả trực tiếp của OS X khi sử dụng shell "bash" Unix, trong khi cái trước là sự đổi mới của chính Apple. Các cú pháp rõ ràng rất khác nhau, với AppleScript có kiểu ngôn ngữ giả tự nhiên.

Câu hỏi của tôi là, tập lệnh AppleScript và Bash thường được sử dụng (thực sự, chúng nên được sử dụng) cho các nhiệm vụ và mục đích khác nhau trên OS X. Tôi mơ hồ nhận thức được rất nhiều nhiệm vụ tôi có thể thực hiện với tập lệnh Bash, mặc dù dĩ nhiên là mã đối với một số người tiên tiến hơn có thể nhanh chóng trở nên hỗn độn. Liệu hai ngôn ngữ này có các trường hợp sử dụng chồng chéo hoặc gần giống nhau, mặc dù phát minh ra AppleScript sau này của Apple - hoặc chúng có ý định được sử dụng với các tình huống khác nhau không? Một tổng quan cấp cao cũng như một số ví dụ cụ thể sẽ được đánh giá cao.


Nếu bạn có các tác vụ liên quan đến tệp và thư mục mua "Hazel", thì đó là một công cụ dựa trên quy tắc thực sự mạnh mẽ rất hữu ích. Nó cũng có thể đá các kịch bản shell và Applescripts dựa trên các quy tắc.
Stuart Woodward

Câu trả lời:


17

Cả shell- và AppleScripts đều có thể được sử dụng ở bất cứ đâu hoặc phù hợp.

AppleScripts hoạt động tốt hơn khi nói chuyện với các ứng dụng và cơ sở hệ thống cấp người dùng. (Ví dụ, bạn có thể nói tell app "iTunes" to playvà nó sẽ, hoặc tell app "Finder" to open the first file of the second window.)

Các kịch bản Shell (bạn đã đề cập đến bash) hoạt động tốt hơn khi nói chuyện với các đối tượng hệ thống cấp thấp và các công cụ Unixy.

Cả hai đều có thể tương thích: bạn có thể gọi lệnh shell từ AppleScript do shell script "command here"và bạn có thể gọi mã AppleScript từ shell với osascript -e "AppleScript". Hơn nữa, có khá nhiều sự chồng chéo giữa hai bên (đặc biệt là khi nói đến hoạt động của hệ thống tệp).

Chắc chắn có nhiều tài nguyên hơn để học kịch bản shell trực tuyến hơn AppleScript và điều đó không giúp AppleScript nổi tiếng là ngôn ngữ "chỉ đọc" (nghĩa là khó viết hơn đọc).

Trong mọi trường hợp, cách hiện đại nhất để thực hiện kịch bản là với Automator, trong đó bạn có thể sử dụng shell- hoặc AppleScripting (hoặc cả hai) cùng với các mô-đun dựng sẵn từ các ứng dụng khác nhau mà bạn đã cài đặt.


Cảm ơn; đó là một tổng quan rất nhiều thông tin. Bạn có bất kỳ đề xuất nào cho các tài nguyên học tập tốt về sự nguy hiểm của AppleScript không? (Kịch bản Bash cũng vậy, mặc dù bản thân tôi có thể tìm thấy những thứ đó khá dễ dàng.)
Noldorin

3
AppleScript có một danh tiếng (phần nào kiếm được) là chỉ đọc; Các tập lệnh Shell đôi khi nghiêng về phía cuối "chỉ ghi" của phổ.
Daniel

@Noldorin Tôi đã mua một cuốn sách để học AppleScript, nhưng tôi có xu hướng sử dụng Google trước và chỉ mục thứ hai của cuốn sách khi tôi đang cố nhớ cú pháp của một lệnh cụ thể.
Cajunluke

@CajunLuke: Ah, đủ công bằng. Làm thế nào bạn học AppleScript lần đầu tiên mặc dù ??
Noldorin

@Noldorin Khá nhiều thử nghiệm và lỗi và Google. Một số thứ rất khó để Google tìm kiếm, vì vậy đó là lý do tại sao tôi mua cuốn sách này.
Cajunluke

8

Mặc dù bối cảnh kịch bản có thể làm bất cứ điều gì khác có thể (vì các kịch bản shell có thể gọi /usr/bin/osascriptđể gọi AppleScript và AppleScript có do shell scriptlệnh), nhưng thực sự có bối cảnh phù hợp với cái nào hơn cái kia.

Cả hai ngôn ngữ kịch bản là ngôn ngữ "keo" - chúng có thể tự thực hiện những điều tối thiểu và thay vào đó hoàn thành hầu hết các nhiệm vụ của mình bằng cách gọi các khả năng của các chương trình khác. Các kịch bản Shell sử dụng các ống Unix, trong khi AppleScript có tell applicationcú pháp.

Trường hợp họ phân kỳ là AppleScripts giao tiếp trực tiếp với các ứng dụng có thể tạo tập lệnh (hầu như luôn luôn là ứng dụng GUI), trong khi tập lệnh shell giao tiếp chủ yếu với các chương trình dòng lệnh (một số trong đó có thể gọi giao diện người dùng đồ họa, nhưng nhiều người thì không).

Khi nói đến nhiệm vụ quản lý tập tin, cả hai phương pháp đều có thể hoạt động. Người ta có thể Tell Application Findersao chép các tập tin hoặc chạy cplệnh trong tập lệnh shell. Vậy tại sao lại dùng cái này hơn cái kia? Chắc chắn một số tác giả kịch bản quen thuộc với một ngôn ngữ hơn ngôn ngữ kia, và do đó sẽ thích sử dụng công cụ đó. Nhưng một sự xem xét tốt hơn là của người sử dụng kịch bản. AppleScript thường có thể được gọi từ GUI Mac: bấm đúp vào ứng dụng AppleScript hoặc thả tệp vào một hoặc sử dụng menu AppleScript trên toàn hệ thống hoặc trong một chương trình cụ thể. Các chương trình như Mail có thể được thiết lập để chạy AppleScript trên các thư đến để lọc chúng. Đối với người dùng đã quen với việc sử dụng máy Mac theo cách "giống như máy Mac" (nghĩa là từ GUI), AppleScripts thường dễ truy cập hơn.

Các kịch bản Shell thường (nhưng không phải luôn luôn) sống trong Terminal. Nếu một người đã sử dụng Terminal, việc chạy tập lệnh shell có thể thuận tiện hơn việc gọi AppleScript. Mặt khác, nhiều người dùng không thích bằng cách nhập lệnh trong cửa sổ Terminal hoặc thậm chí nhấp vào tệp tập lệnh mở cửa sổ Terminal để thực hiện phép thuật của mình. Cá nhân tôi thấy cú pháp của các tập lệnh shell dễ đọc hơn so với AppleScripts, nhưng tôi nghi ngờ tôi thuộc nhóm thiểu số trong đó. Shell script quen thuộc với người sử dụng nhiều hệ thống Unix-like khác nhau.

Trong mọi trường hợp, cả hai đều là những công cụ mạnh mẽ để giành quyền kiểm soát tốt hơn đối với máy Mac của bạn.


Cảm ơn bạn; điều này chắc chắn làm rõ vấn đề và xác nhận một số nghi ngờ của tôi.
Noldorin

Tôi đoán rằng Tell Application Finderđể sao chép các tệp sẽ mở một cửa sổ với thanh tiến trình có thể nhìn thấy, trong khi cpsẽ không. Có đúng không?
TRiG

4

Các câu trả lời khác đưa ra những đánh giá cao cấp về ý định đằng sau hai kỹ thuật viết kịch bản này. Có lẽ tôi sẽ chỉ cho bạn ví dụ về cách tôi sử dụng chúng.

Với Applescript, tôi đã thực hiện các quy tắc xử lý cho Mail, kết nối BBEdit với R để xử lý thống kê, tạo các Tác vụ thư mục phức tạp và thực hiện sắp xếp lại các bức ảnh của tôi theo thời gian lớn trong iPhoto và Aperture. Tôi cũng đã tạo các ứng dụng nhỏ với các nút và hiển thị văn bản. Về cơ bản, đây là thao tác tự động của các ứng dụng phức tạp với GUI.

Với kịch bản Bash, tôi đã tạo các thói quen xử lý hình ảnh tự động với Imagemagick, các quy trình xử lý PDF với Ghostscript, các thói quen thời gian và ngày tháng và rất nhiều xử lý văn bản với Bash, sed / awk và Perl. Các tiện ích Unix có xu hướng gọn gàng, nhanh chóng và linh hoạt, và Bash là một cách tuyệt vời để kết hợp chúng thành các công cụ rất mạnh mẽ, dễ dàng.

Đôi khi tôi gọi các tập lệnh Bash từ trong Applescript, thường là cho mục đích xử lý văn bản (GREP) hoặc để tìm nạp trang web nhẹ (curl). Tôi hầu như luôn luôn sử dụng kỹ thuật này để có được một chút dữ liệu hoặc một biến để sử dụng thêm trong Applescript của mình.


Ah, những ví dụ cụ thể này khá hữu ích. Cảm ơn vì điều đó. Bạn có bất kỳ tài nguyên học tập được đề xuất cho AppleScript không? Đối với một người mới bắt đầu hoàn thành. (Tôi đã sử dụng một đoạn script Bash nhỏ trong quá khứ và có thể tự học lại nó.)
Noldorin

2
Vâng, cuốn sách tôi được hưởng lợi nhiều nhất là "AppleScript: The Definitive Guide" của Matt Neuberg. Tài liệu dành cho nhà phát triển của Apple vẫn ổn và đáng để tham khảo, nhưng cuốn sách của Neuberg đánh giá khá trung thực cả điểm mạnh và điểm yếu của ngôn ngữ. Bạn sẽ thấy rằng sự khăng khăng của Applescript về ngữ pháp "tự nhiên" không phải là rất tự nhiên, và trong nhiều trường hợp sẽ phản trực giác. Neuberg làm rõ khi điều đó xảy ra và tại sao.
Tro

Đó chính xác là ấn tượng tôi có được từ lúc đầu nhìn vào ngôn ngữ. Ngôi nhà nửa đường giữa máy móc và ngôn ngữ tự nhiên này có vẻ khá khó xử. Chúc mừng cho các khuyến nghị!
Noldorin

3

Nó có thể là quá đơn giản, nhưng kịch bản shell là để kết hợp các chương trình hiện có để thực hiện các tác vụ mới trong khi AppleScript là để điều khiển các ứng dụng (chủ yếu là GUI) từ xa. Các chương trình Unix cổ điển thường đọc một số đầu vào và tạo ra một số kịch bản đầu ra và shell cho phép bạn kết hợp chúng. AppleScript là để tự động hóa các ứng dụng GUI.

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.