AppleScript กับสคริปต์ทุบตี?


13

ฉันเป็น "ผู้ใช้ที่ทรงพลัง" ของ Windows มาเป็นเวลานานและนักพัฒนาที่เพิ่งตัดสินใจย้ายไปที่ Mac OS X

ใน OS X Lion และรุ่นก่อนหน้าดูเหมือนจะมีสองตัวเลือกหลักสำหรับการเขียนสคริปต์และระบบอัตโนมัติใน OS X: AppleScript และ Bash script แน่นอนว่าเป็นผลสืบเนื่องโดยตรงของ OS X โดยใช้ Unix "bash" shell ในขณะที่อดีตเป็นนวัตกรรมของ Apple เอง ซินแท็กซ์มีความแตกต่างอย่างชัดเจนกับ AppleScript ที่มีลักษณะเป็นภาษาเทียม

คำถามของฉันคือเป็นสคริปต์ AppleScript และ Bash ที่ใช้กันทั่วไป (จริง ๆ ควรใช้) สำหรับการแยกงานและวัตถุประสงค์ใน OS X ฉันรู้ทันกับงานมากมายที่ฉันสามารถทำได้ด้วยสคริปต์ Bash แม้ว่าจะเป็นรหัสก็ตาม สำหรับบางคนที่สูงขึ้นสามารถกลายเป็นซับซ้อนได้อย่างรวดเร็ว สองภาษานี้มีกรณีการใช้งานที่ทับซ้อนกันหรือใกล้เคียงกันแม้ว่าจะมีการประดิษฐ์ AppleScript ในภายหลังของ Apple หรือว่าพวกเขาตั้งใจจะใช้กับสถานการณ์ที่แตกต่างกันในใจ ภาพรวมระดับสูงรวมถึงตัวอย่างที่เฉพาะเจาะจงจะได้รับการชื่นชม


หากคุณมีงานที่เกี่ยวข้องกับไฟล์และโฟลเดอร์ซื้อ "Hazel" มันเป็นเครื่องมือที่ใช้กฏที่มีประสิทธิภาพมากซึ่งมีประโยชน์มาก นอกจากนี้ยังสามารถเตะสคริปต์เชลล์และ Applescripts ตามกฎ
Stuart Woodward

คำตอบ:


17

ทั้ง shell- และ AppleScript สามารถใช้งานได้ทุกที่ไม่ว่าจะเหมาะสม

AppleScript ทำงานได้ดีขึ้นเมื่อพูดคุยกับแอพและระบบอำนวยความสะดวกระดับผู้ใช้ (ตัวอย่างเช่นคุณสามารถพูดได้tell app "iTunes" to playและมันจะหรือtell app "Finder" to open the first file of the second window)

เชลล์สคริปต์ (คุณเรียกว่าทุบตี) ทำงานได้ดีขึ้นเมื่อพูดกับวัตถุระบบระดับต่ำและสิ่ง Unixy

พวกเขาทั้งสองทำงานร่วมกันได้: คุณสามารถเรียกคำสั่งเชลล์จาก AppleScript ด้วยdo shell script "command here"และคุณสามารถเรียกรหัส AppleScript osascript -e "AppleScript"จากเชลล์กับ นอกจากนี้ยังมีการซ้อนทับกันเล็กน้อยระหว่างสอง (โดยเฉพาะอย่างยิ่งเมื่อมันมาถึงการดำเนินงานของระบบไฟล์)

มีแหล่งข้อมูลเพิ่มเติมสำหรับการเรียนรู้เชลล์สคริปต์ออนไลน์มากกว่า AppleScript และไม่ช่วยให้ AppleScript มีชื่อเสียงว่าเป็นภาษา "อ่านอย่างเดียว" (เช่นเขียนยากกว่าอ่าน)

ไม่ว่าในกรณีใดวิธีการเขียนสคริปต์ที่ทันสมัยที่สุดคือ Automator ซึ่งคุณสามารถใช้เชลล์หรือ AppleScripting (หรือทั้งสองอย่าง) พร้อมกับโมดูลที่สร้างไว้ล่วงหน้าจากแอพต่างๆที่คุณติดตั้งไว้


ขอบคุณ; นั่นเป็นภาพรวมที่ให้ข้อมูลมาก คุณมีคำแนะนำสำหรับแหล่งข้อมูลการเรียนรู้ที่ดีใน AppleScript บางทีไหม? (สคริปต์ทุบตีเช่นกันแม้ว่าฉันจะสามารถค้นหาสิ่งเหล่านั้นได้อย่างง่ายดายด้วยตนเอง)
Noldorin

3
AppleScript มีชื่อเสียง (ค่อนข้างได้รับ) ในการอ่านอย่างเดียว; เชลล์สคริปต์บางครั้งเอนไปทางส่วนปลาย "เขียนอย่างเดียว" ของสเปกตรัม
Daniel

@Noldorin ฉันซื้อหนังสือเพื่อเรียนรู้ AppleScript แต่ฉันมักจะใช้ Google ก่อนและดัชนีของหนังสือเล่มที่สองเมื่อฉันพยายามจดจำไวยากรณ์ของคำสั่งเฉพาะ
Cajunluke

@CajunLuke: อ้ายุติธรรมพอ คุณรู้จัก AppleScript เป็นครั้งแรกได้อย่างไร?
Noldorin

@Noldorin ลองผิดลองถูกและ Google เป็นอย่างมาก Google มีบางสิ่งที่ยากดังนั้นฉันจึงซื้อหนังสือเล่มนี้
Cajunluke

8

ในขณะที่บริบทการเขียนสคริปต์สามารถทำสิ่งอื่น ๆ ที่สามารถทำได้ (เพราะเชลล์สคริปต์สามารถเรียก/usr/bin/osascriptเพื่อเรียกใช้ AppleScript และ AppleScript มีdo shell scriptคำสั่ง) แต่ก็มีบริบทที่หนึ่งที่เหมาะสมกว่าอีก

ภาษาสคริปต์ทั้งสองเป็นภาษา "กาว" - พวกเขาสามารถทำสิ่งเล็ก ๆ น้อย ๆ ได้เองและทำภารกิจส่วนใหญ่ให้สำเร็จโดยการเรียกใช้ความสามารถของโปรแกรมอื่น ๆ เชลล์สคริปต์ใช้ประโยชน์จากไปป์ Unix ในขณะที่ AppleScript มีtell applicationไวยากรณ์

ที่ใดที่พวกเขาแตกต่างกันคือ AppleScripts สื่อสารโดยตรงกับแอปพลิเคชันที่สามารถสคริปต์ได้ (เกือบทุกแอปพลิเคชัน GUI) ในขณะที่เชลล์สคริปท์จะสื่อสารกับโปรแกรมบรรทัดคำสั่งเป็นหลัก

เมื่อพูดถึงงานการจัดการไฟล์ทั้งสองวิธีสามารถทำงานได้ หนึ่งสามารถTell Application Finderคัดลอกไฟล์หรือเรียกใช้cpคำสั่งในเชลล์สคริปต์ เหตุใดจึงต้องใช้อีกอันหนึ่ง แน่นอนว่าผู้เขียนสคริปต์บางคนคุ้นเคยกับภาษาหนึ่งมากกว่าอีกภาษาหนึ่งและจะชอบใช้เครื่องมือนั้นมากกว่า แต่การพิจารณาที่ดีกว่านั้นก็คือผู้ใช้สคริปต์ AppleScript สามารถเรียกใช้จาก Mac GUI ได้บ่อยครั้ง: คลิกสองครั้งที่แอปพลิเคชัน AppleScript หรือวางไฟล์ลงในที่เดียวหรือใช้เมนู AppleScript ทั้งระบบหรือภายในโปรแกรมเฉพาะ โปรแกรมเช่น Mail สามารถตั้งค่าให้เรียกใช้ AppleScript ในข้อความขาเข้าเพื่อกรองได้ สำหรับผู้ใช้ที่คุ้นเคยกับการใช้ Mac ในลักษณะ "Mac-like" (เช่นจาก GUI) นั้น AppleScript สามารถเข้าถึงได้บ่อยขึ้น

เชลล์สคริปต์มักอาศัยอยู่ในเทอร์มินัล (แต่ไม่เสมอไป) หากมีคนใช้ Terminal อยู่แล้วการรันเชลล์สคริปต์จะสะดวกกว่าการเรียก AppleScript ในทางกลับกันผู้ใช้หลายคนไม่ต้องใส่โดยการพิมพ์คำสั่งในหน้าต่าง Terminal หรือแม้แต่การคลิกไฟล์สคริปต์ที่เปิดหน้าต่าง Terminal เพื่อทำสิ่งมหัศจรรย์ ฉันเองพบว่าไวยากรณ์ของเชลล์สคริปต์สามารถอ่านได้ง่ายกว่า AppleScripts แต่ฉันคิดว่าฉันเป็นคนกลุ่มน้อย เชลล์สคริปต์มีความคุ้นเคยกับผู้ใช้ที่แตกต่างกันหลายระบบปฏิบัติการ Unix เหมือน

ไม่ว่าในกรณีใด ๆ ทั้งสองเป็นเครื่องมือที่ทรงพลังสำหรับการควบคุม Mac ของคุณได้ดียิ่งขึ้น


ขอขอบคุณ; สิ่งนี้จะทำให้ชัดเจนและยืนยันความสงสัยของฉัน
Noldorin

ฉันเดาว่าTell Application Finderการคัดลอกไฟล์จะเปิดหน้าต่างที่มีแถบแสดงความคืบหน้า แต่cpจะไม่ปรากฏ นั่นถูกต้องใช่ไหม?
TRiG

4

คำตอบอื่น ๆ ให้ภาพรวมระดับสูงที่ยอดเยี่ยมของความตั้งใจที่อยู่เบื้องหลังเทคนิคการเขียนสคริปต์ทั้งสองนี้ บางทีฉันอาจจะให้ตัวอย่างว่าฉันใช้พวกเขาอย่างไร

ด้วย Applescript ฉันได้สร้างกฎการประมวลผลสำหรับ Mail เชื่อมโยง BBEdit กับ R เพื่อการประมวลผลทางสถิติสร้างการกระทำของโฟลเดอร์ที่ซับซ้อนและทำการปรับโครงสร้างรูปภาพตามเวลาที่กำหนดใน iPhoto และ Aperture ฉันยังสร้างมินิแอพด้วยปุ่มและการแสดงข้อความ นี่คือการจัดการแอปที่ซับซ้อนโดยอัตโนมัติด้วย GUI

ด้วย Bash scripting ฉันได้สร้างรูทีนการประมวลผลภาพอัตโนมัติด้วย Imagemagick, การประมวลผล PDF ด้วย Ghostscript, เวลาและวันที่รูทีนและการประมวลผลข้อความจำนวนมากด้วย Bash, sed / awk และ Perl ยูทิลิตี้ของ Unix นั้นมีแนวโน้มที่จะรวดเร็วและยืดหยุ่นและ Bash เป็นวิธีที่ยอดเยี่ยมในการรวมเข้ากับเครื่องมือที่ทรงพลังและใช้งานง่าย

บางครั้งฉันเรียกสคริปต์ Bash จากภายใน Applescript ซึ่งโดยปกติจะใช้เพื่อการประมวลผลข้อความ (GREP) หรือเพื่อเรียกเว็บไซต์แบบเบา (curl) ฉันมักจะใช้เทคนิคนี้เพื่อรับข้อมูลหรือตัวแปรเพื่อใช้เพิ่มเติมใน Applescript ของฉัน


อาตัวอย่างที่เฉพาะเจาะจงเหล่านี้ค่อนข้างมีประโยชน์ ขอบคุณสำหรับสิ่งนี้. คุณมีแหล่งข้อมูลการเรียนรู้ที่แนะนำสำหรับ AppleScript ไหม? สำหรับผู้เริ่มต้นที่สมบูรณ์ (ฉันเคยใช้สคริปต์ Bash เล็กน้อยในอดีตและอาจจะสามารถเรียนรู้ด้วยตนเองได้)
Noldorin

2
ใช่หนังสือที่ฉันได้รับประโยชน์มากที่สุดคือ "AppleScript: The Definitive Guide" ของ Matt Neuberg เอกสารประกอบสำหรับนักพัฒนาของ Apple นั้นใช้ได้และคุ้มค่าสำหรับการอ้างอิง แต่หนังสือของ Neuberg ค่อนข้างประเมินทั้งจุดแข็งและจุดอ่อนของภาษา คุณจะพบว่าการเรียกร้องของ Applescript เกี่ยวกับไวยากรณ์ "ธรรมชาติ" นั้นไม่เป็นธรรมชาติมากนักและในหลาย ๆ กรณีจะมีการตอบโต้อย่างฉับพลัน Neuberg ชี้แจงว่าเกิดอะไรขึ้นและทำไม
Ash

นั่นคือความประทับใจที่ฉันได้รับจากการมองภาษาตอนแรก บ้านครึ่งทางระหว่างเครื่องจักรกับภาษาธรรมชาติดูค่อนข้างอึดอัด ขอบคุณสำหรับคำแนะนำ!
Noldorin

3

มันอาจเป็นการทำให้เกินขนาด แต่เชลล์สคริปต์ใช้สำหรับการรวมโปรแกรมที่มีอยู่เพื่อทำงานใหม่ในขณะที่ AppleScript คือการควบคุม (ส่วนใหญ่เป็น GUI) แอปพลิเคชันจากระยะไกล โดยทั่วไปแล้วโปรแกรม Unix แบบคลาสสิคจะอ่านอินพุตและสร้างเอาต์พุตและเชลล์สคริปต์ให้คุณรวมเข้าด้วยกัน AppleScript คือการใช้งาน GUI อัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.