วิธีรันเชลล์สคริปต์ด้วยไฟล์ / โฟลเดอร์ที่เลือกในโปรแกรมค้นหา?


13

ฉันมาจาก Linux ซึ่งเป็นเรื่องง่ายที่จะเรียกใช้สคริปต์กับชุดของไฟล์ใน nautilus หรือ dolphin แต่ฉันประหลาดใจมากที่เห็นว่านี่ไม่ใช่เรื่องง่ายใน OSX

โดยเฉพาะอย่างยิ่งฉันชอบ ctrl คลิกที่ตัวเลือกบางอย่างในตัวค้นหาเลือกสคริปต์ของฉันและมีหน้าต่างเทอร์มินัลปรากฏขึ้นเพื่อแสดงความคืบหน้าหรือการโต้ตอบกับผู้ใช้

คำตอบ:


8

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

เวอร์ชัน“ ลากแรก”:

  1. เลือกและลากรายการFinderบางรายการไปที่หน้าต่างเทอร์มินัลที่แสดงพรอมต์เชลล์ เทอร์มินัลจะแทรกชื่อพา ธ (Escape)
  2. พิมพ์Control+ A(ไปที่จุดเริ่มต้นของบรรทัด ⌃A เป็นค่าเริ่มต้น แต่แตกต่างกันตามเชลล์ / การกำหนดค่า)
  3. พิมพ์คำสั่งของคุณและเว้นวรรค (มันจะถูกแทรกก่อนชื่อพา ธ )

เวอร์ชั่น“ คิดล่วงหน้า”:

  1. ในลำดับใด ๆ ให้ทำทั้งสองอย่าง:
    • ในหน้าต่างTerminalให้พิมพ์ส่วนเริ่มต้นของคำสั่งและช่องว่างของคุณ (ทุกอย่างยกเว้นชื่อพา ธ )
    • เลือกบางรายการในFinder
  2. ลากรายการที่เลือกจากFinderไปที่หน้าต่างTerminalที่คุณพิมพ์คำสั่ง
  3. เปิดใช้งานเทอร์มิReturnหน้าต่างและกด

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

ความเป็นไปได้อัตโนมัติบางอย่างรวมถึง:

  • แอปพลิเคชันหยด AppleScript
  • โปรแกรม AppleScript แบบธรรมดาที่เปิดตัวโดยเมนูสคริปต์ในตัวหรือตัวเรียกใช้อื่น ๆ
    • รับชื่อพา ธ จากตัวเลือกของFinder
  • ปลั๊กอินเวิร์กโฟลว์แอปพลิเคชันหรือตัวค้นหาอัตโนมัติ
  • .commandไฟล์เรียกทำงาน(โดยปกติคือเชลล์สคริปต์เปิดในFinderเพื่อรันในเทอร์มินัล )
    • รับชื่อพา ธ จากตัวเลือกของFinder (ผ่านทางosascript )
  • เครื่องมือของบุคคลที่สามที่มีฟังก์ชั่นที่คุณต้องการอยู่แล้ว

7

ฉันไม่คิดว่าจะมีวิธีการทำสิ่งนี้โดยตรง คุณสามารถสร้างแอปพลิเคชัน "Automator" ที่จะทำสิ่งที่คุณกำลังมองหา นี่แสดงให้เห็นว่าสแต็ค Automator มีลักษณะอย่างไร:

ป้อนคำอธิบายรูปภาพที่นี่

บันทึกผลลัพธ์เป็นแอปพลิเคชันจากนั้นในตัวค้นหาเลือกไฟล์คลิกขวาและเลือก "เปิดด้วย" จากนั้นเลือกแอปพลิเคชันของคุณ (คุณอาจต้องเลือก "อื่น ๆ ... " ที่ด้านล่างของรายการแอปพลิเคชัน)

คุณไม่ได้รับการโต้ตอบกับสคริปต์ด้วยวิธีนี้ แต่คุณสามารถวนไฟล์เพื่อดำเนินการกับเชลล์สคริปต์


จะง่ายยิ่งขึ้นถ้าคุณลากไฟล์ไปที่ไอคอนแอปพลิเคชันแล้วปล่อย
kiamlaluno

5

บริการคือวิธีที่จัดการกับสิ่งเหล่านี้

ภายใต้เมนูแอปพลิเคชัน (ในกรณีนี้ 'Finder') จะมีServicesตัวเลือกเมนู(เกือบ) เสมอซึ่งจะให้บริการที่ใช้กับแอปพลิเคชันปัจจุบันและสถานะปัจจุบัน โดยทั่วไปสถานะคือชนิดของวัตถุที่เลือก (ข้อความไฟล์ / โฟลเดอร์ ฯลฯ )

สามารถเปิดใช้งานปิดใช้งานและแป้นพิมพ์ลัดที่กำหนดในแผงการตั้งค่าระบบที่เหมาะสมสำหรับช่วงเวลาสุดท้ายของสามช่วงเวลานั้นKeyboardเท่านั้น

แป้นพิมพ์ลัด

ในการสร้างบริการที่ใช้เชลล์สคริปต์กับไฟล์ / โฟลเดอร์ใน Finder:

เรียกใช้งานและสร้างServiceเอกสารประเภทใหม่

บริการใหม่

  • กำหนดประเภทของวัตถุที่บริการใช้กับ ( files or folders)
  • ตั้งค่าแอปพลิเคชันที่ให้บริการ ( )
    • อีกวิธีหนึ่งคือการGet Selected Finder Itemsกระทำ
  • เพิ่มการกระทำของ Run Shell Script
  • ตัดสินใจว่าคุณต้องการให้อินพุตเป็นอาร์กิวเมนต์หรือ

ควรมีลักษณะดังนี้:

ตัวอย่างเชลล์สคริปต์

จะวางไว้ใน~/Library/Servicesโฟลเดอร์ของคุณโดยอัตโนมัติเมื่อคุณบันทึกซึ่งจะทำให้สามารถใช้งานได้ (เกือบ) ทันทีผ่านApplication -> Servicesเมนูหรือเมนูบริบท (คลิกขวา)

โฟลเดอร์ทดสอบ

ส่งผลให้เอกสาร TextEdit


ในอดีตฉันควรมีการเชื่อมโยงสร้างบริการ OS X ที่ส่งผ่านเส้นทางของไฟล์ไปยังเชลล์สคริปต์ได้อย่างไร ซึ่งมีคำตอบที่คล้ายกันมาก
ทะเลสาบ

2

จากคำตอบข้างต้นฉันสร้างสิ่งนี้ขึ้นมา

https://github.com/commonpike/DropShell

แอป applescript พื้นฐานที่เรียกใช้ shellfile ที่อยู่ในแอพด้วยไฟล์ที่ถูกดร็อปเป็นอาร์กิวเมนต์ คุณสามารถแก้ไขเชลล์สคริปต์ได้ตามต้องการ


2

ตามคำตอบของ commonpike ฉันได้สร้าง AppleScript ที่เปลี่ยนเส้นทางไฟล์ทั้งหมดที่ถูกทิ้งลงไปสู่เชลล์สคริปต์ด้วยชื่อที่ตรงกัน เพียงบันทึกเป็นแอปพลิเคชันจากภายใน ScriptEditor ของ Apple และเปลี่ยนชื่อเป็น script.app เพื่อให้ตรงกับ script.sh ของคุณ https://github.com/PHolker/scripts/blob/master/DropScript.scpt


1

ใน Mac OS X ภาษาสคริปต์ที่ต้องการคือ Applescript คุณสามารถสร้าง droplet (สคริปต์ที่จะทำบางสิ่งเมื่อคุณวางไฟล์ลงบนไอคอน) วางสคริปต์ (ซึ่งสามารถบันทึกเป็นแอปพลิเคชัน) ไอคอนบนเดสก์ท็อปแล้วลากและวางไฟล์ที่คุณต้องการส่งไปยัง ต้นฉบับ

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


1

ฉันต้องการทำเช่นนั้น แต่ไม่เหมือนวิธีแก้ไขปัญหาข้างต้นฉันต้องการสร้างพารามิเตอร์ที่อ้างถึงสำหรับเชลล์สคริปต์ บรรดาวิธีการอื่น ๆ จะมีการปรับ แต่พวกเขากำลังชนิดเช่นบอก "เพียงคำสั่งโวเข้ากับขั้ว" pbpasteเมื่อสิ่งที่คุณต้องการจริงๆคือ

ฉันต้องการสร้างฟังก์ชั่นเชลล์ที่ฉันสามารถใช้ในสคริปต์ของฉันซึ่งขยายเป็นพารามิเตอร์ไฟล์สำหรับการเลือก Finder แต่ละรายการ ฉันใช้เปลือกปลาและดูเหมือนว่าจะทำงานค่อนข้าง:

function selection
    osascript -e "tell application \"Finder\" to set s to the selection as alias list" -e "repeat with f in s" -e "set contents of f to POSIX path of f" -e "end repeat" -e "set AppleScript's text item delimiters to linefeed" -e "s as string"
end

สินค้ามือสอง (อีกครั้งในเปลือกปลา) convert-video (selection)เช่น

ในฟังก์ชั่นทุบตีมันอาจจะต้องพูดเอาท์พุทกับสิ่งที่ชอบ| tr '\n' '\0' | xargs -0 printf "%q" {}ในตอนท้ายของคำสั่ง osascript ที่ไม่แน่ใจ

(หมายเหตุ: ทุกสิ่งที่ฉันรู้เกี่ยวกับ applescript & เชลล์สคริปต์ขั้นสูงฉันได้เรียนรู้อีกครั้งใน 2 ชั่วโมงที่ผ่านมาและจะลืมในวันพรุ่งนี้)


กำลังพยายามทำสิ่งนี้ใน bash เมื่อเร็ว ๆ นี้ล้มเหลวถามที่นี่superuser.com/questions/1353966ได้รับคำตอบที่ระบุว่า: ไม่เป็นไปไม่ได้: ^ (คุณแพ้คุณจะเปลี่ยนไปใช้เชลล์ปลาใน Mac ที่ทำงานของฉันด้วย) ว่าฉันจะใช้เคล็ดลับการลากการค้นหาที่กล่าวถึงโดยคริสจอห์นสันกล่าวข้างต้นค่อนข้างมาก.
ปิแอร์ฮุสตัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.