กำลังดำเนินการ Shell Scripts จาก OS X Dock?


160

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


2
ควร +1 เฉพาะสำหรับอวตาร แต่ฉันชอบหัวข้อด้วย
Matt Bannert

คุณอาจต้องการพิจารณาเปลี่ยนคำตอบที่ได้รับการยอมรับให้เป็นที่หนึ่ง @Wilco ฉันคิดว่ามันเป็นคำตอบที่ดีกว่า
สีเทา

คำตอบ:


190

คุณสามารถสร้างเวิร์กโฟลว์อัตโนมัติด้วยขั้นตอนเดียว - "เรียกใช้เชลล์สคริปต์"

จากนั้นFile > Save Asและเปลี่ยนรูปแบบไฟล์เป็น "แอปพลิเคชัน" เมื่อคุณเปิดแอปพลิเคชันมันจะเรียกใช้ขั้นตอน Shell Script ดำเนินการคำสั่งออกหลังจากเสร็จสิ้น

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

(Automator อยู่ใน/Applicationsโฟลเดอร์ของคุณ!)

ตัวอย่างเวิร์กโฟลว์


6
@dbr, ปุ่มดัน GUI! :) แค่ล้อเล่นนั่นเป็นคำแนะนำที่ดี!
willasaywhat

ใช่มันเป็นข้อเสนอแนะที่ดี :) ผมเคยเขียนแม้กระทั่งการกระทำอัตโนมัติสำหรับบางส่วนของปพลิเคชันของฉันและฉันยังคงลืมเกี่ยวกับมันในเวลาเช่นนี้ :)
เจสันโคโค่

ฉันไม่สามารถใช้งานได้กับ nohup, a la "nohup / usr / bin / myscript &; disown -a && exit 0" ฉันต้องการแอพ / เวิร์กโฟลว์เพื่อเรียกใช้สคริปต์และออกจากทันที ความคิดใด ๆ :-)
hourback

3
@martineau หากคุณเปิดแอปพลิเคชันโดยทำopen -a SomeAppThing.app --args --etc=2ควรมุ่งเน้น หรือคุณสามารถโฟกัสได้โดยใช้ Applescript (เช่นosascript -e 'tell application "Google Chrome" to activate')
dbr

1
หมายเหตุ: หากสคริปต์ของคุณกำลังเรียกใช้แอป GUI ซึ่งจะยังคงเปิดอยู่ครู่หนึ่งสิ่งนี้จะแสดงไอคอนเฟืองหมุนอยู่ตลอดเวลาในแถบงานจนกว่าแอปจะปิด การหลีกเลี่ยงอย่างใดอย่างหนึ่งคือการเพิ่ม `&> / dev / null &` ลงในบรรทัดการเรียกใช้สคริปต์ดังนั้น Automator จะไม่รอ
eWall

50

หากคุณไม่จำเป็นต้องมีหน้าต่าง terminal คุณสามารถทำให้แฟ้มที่ปฏิบัติการใด ๆ แอพลิเคชันเพียงโดยการสร้างสคริปต์เปลือกและย้ายไปยังชื่อไฟล์Example Example.app/Contents/MacOS/Exampleคุณสามารถวางแอปพลิเคชั่นใหม่นี้ลงใน Dock ของคุณเหมือนที่อื่นและรันด้วยการคลิก

หมายเหตุ:ชื่อแอพจะต้องตรงกับชื่อสคริปต์ทุกประการ ดังนั้นไดเรกทอรีระดับบนสุดจะต้องมีExample.appและสคริปต์ในContents/MacOSไดเรกทอรีย่อยจะต้องตั้งชื่อExampleและสคริปต์จะต้องสามารถดำเนินการได้

หากคุณต้องการให้หน้าต่างเทอร์มินัลปรากฏขึ้นฉันไม่มีวิธีแก้ปัญหาง่ายๆ คุณอาจทำอะไรกับ Applescript แต่ก็ไม่สะอาดมาก


1
คุณไม่ทราบหรือไม่ว่ามีวิธีง่ายๆในการส่งไฟล์เป็นอาร์กิวเมนต์ไปยังเชลล์สคริปต์หรือไม่ สำหรับไฟล์ที่เปิดโดยใช้ "open with ... "
Fuzzy76

9
สำหรับทุกคนที่พยายามทำเช่นนี้ - ชื่อของแอปจะต้องตรงกับชื่อสคริปต์ทุกประการ ดังนั้นจริงๆมันจะต้องมีไม่เพียงexample.sh.app example.appคุณจะได้รับคำเตือนเกี่ยวกับแอพที่เสียหายหากสิ่งเหล่านี้ไม่ตรงกัน
Kip

1
เพื่อชี้แจง - ฉันเป็น OSX noob - คุณหมายถึงแค่สร้างโครงสร้างโฟลเดอร์เหมือนที่แสดงในตัวอย่างของคุณโดยวางไฟล์สคริปต์ไว้ในรูป
martineau

2
@martineau ใช่ถูกต้อง หากคุณสร้างโฟลเดอร์ที่มีชื่อลงท้าย.appด้วยและด้วยโครงสร้างนั้นจะถือว่าเป็นแอปพลิเคชันที่ปฏิบัติการได้ หากคุณต้องการดูเนื้อหาของโฟลเดอร์นั้นใน Finder คุณจะต้องคลิกขวาและเลือก "ดูเนื้อหาแพ็คเกจ" (เพราะการดับเบิลคลิกที่ไฟล์จะเรียกใช้แอปพลิเคชัน) ใน Terminal มันจะปรากฏเป็นโฟลเดอร์ (ฉันไม่แน่ใจว่า Finder จะให้คุณเปลี่ยนชื่อโฟลเดอร์เป็น. app ด้วยตัวเองหรือคุณอาจต้องเปลี่ยนชื่อใน Terminal)
Jeremy Banks

1
ฉันเพิ่งลองทำสิ่งนี้และได้รับข้อผิดพลาดใน El Capitan (10.11) จาก: "คุณไม่สามารถเปิด .... เพราะแอปพลิเคชัน PowerPC ไม่ได้รับการสนับสนุนอีกต่อไป" : D นั่นน่าสนใจทีเดียว!
อัลเลน

26

บน OSX Mavericks:

  1. สร้างเชลล์สคริปต์ของคุณ
  2. ทำให้เชลล์สคริปต์ของคุณทำงานได้:

    chmod +x your-shell-script.sh
  3. เปลี่ยนชื่อสคริปต์ของคุณเพื่อ.appต่อท้าย:

    mv your-shell-script.sh your-shell-script.app
  4. ลากสคริปต์ไปที่อู่ OSX
  5. เปลี่ยนชื่อสคริปต์ของคุณกลับเป็น.shคำต่อท้าย:

    mv your-shell-script.app your-shell-script.sh
  6. คลิกขวาที่ไฟล์ใน Finder และคลิกตัวเลือก "รับข้อมูล"
  7. ที่ด้านล่างของหน้าต่างตั้งค่าเชลล์สคริปต์ให้เปิดด้วยเทอร์มินัล

ตอนนี้เมื่อคุณคลิกที่สคริปต์ใน dock หน้าต่างเทอร์มินัลจะปรากฏขึ้นและรันสคริปต์ของคุณ

โบนัส: หากต้องการให้เทอร์มินัลปิดเมื่อสคริปต์ของคุณเสร็จสมบูรณ์ให้เพิ่มexit 0ที่ส่วนท้ายและเปลี่ยนการตั้งค่าเทอร์มินัลเป็น "ปิดเชลล์หากออกจากระบบเรียบร้อย" เหมือนที่บอกไว้ในคำตอบ SOนี้


เยี่ยมมากมันใช้งานได้สำหรับฉันมีโอกาสที่จะได้ไอคอนที่ฉันสงสัย FYI: ยังขั้นตอนที่ 7 จะหมายถึงไฟล์และไม่ใช่รายการเมนู ...
ไมค์ Q

วิธีที่ดี! เพียงทั้งหมด. sh กับเทอร์มินัลเปิด
iHTCboy

@ stiemannkj1, สิ่งนี้แสดงไอคอนขณะที่แอพทำงานอยู่หรือไม่? มีวิธีซ่อนอยู่หรือไม่?
Pacerier

@Pacerier ขออภัยฉันไม่ได้ใช้ OSX แล้ว (เปลี่ยนเป็น Linux :)) คุณอาจต้องการที่จะลองคำตอบที่เจเรมีของธนาคาร ฉันไม่มีความคิดอื่น ๆ และเนื่องจากฉันไม่มี OSX ฉันไม่สามารถทดสอบหรือยุ่งกับสิ่งใดเพื่อลองและแสดง / ซ่อนไอคอน ..
stiemannkj1

17

ฉันรู้ว่านี่เก่า แต่ในกรณีที่เป็นประโยชน์กับผู้อื่น:

หากคุณต้องการเรียกใช้สคริปต์และต้องการให้เทอร์มินัลปรากฏขึ้นเพื่อให้คุณเห็นผลลัพธ์ที่คุณสามารถทำได้เช่น Abyss Knight กล่าวและเปลี่ยนนามสกุลเป็น. command หากคุณดับเบิลคลิกที่มันมันจะเปิดหน้าต่างเทอร์มินัลและเรียกใช้

ฉันต้องการมันเพื่อเรียกใช้จาก automator หรือ appleScript เพื่อให้สิ่งนี้เปิดเทอร์มินัลใหม่คำสั่งที่ฉันรันจาก "run shell script" คือ "open myShellScript.command" และมันเปิดในเทอร์มินัลใหม่


ยอดเยี่ยมขอบคุณ! ตอนนี้ทุกคนต้องการทำให้มันเป็นโซลูชั่นที่สมบูรณ์แบบจะเป็นวิธีปิดหน้าต่างเทอร์มินัลเมื่อสคริปต์เสร็จ
Peter M

1
ดีถ้าคุณมีหน้าต่างปิดเมื่อออกจากการเลือกในการตั้งค่า terminal คุณสามารถเพิ่มคำสั่งออกจากสคริปต์ของคุณและคุณจะมีสิ่งที่คุณต้องการ
Jason Tholstrup

7

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

หากคุณต้องการมีส่วนขยาย (เช่น foo.sh) คุณสามารถไปที่หน้าต่างข้อมูลไฟล์ใน Finder และเปลี่ยนแอปพลิเคชั่นเริ่มต้นสำหรับสคริปต์นั้นจากสิ่งที่มันเป็น (TextEdit, TextMate ไม่ว่าค่าเริ่มต้นจะถูกตั้งไว้ที่ใดบนคอมพิวเตอร์ของคุณ ไฟล์. sh) ไปยัง Terminal จากนั้นจะดำเนินการแทนการเปิดในโปรแกรมแก้ไขข้อความ คุณจะต้องลากมันไปทางด้านขวาของ Dock อีกครั้ง


1
หมายเหตุ : มันใช้งานได้ดีใน OS X 10.10 Yosemite ฉันไม่สามารถแสดงความคิดเห็นใน 10.9
Bryan Ash

1
ทำงานบน 10.11 ขอบคุณ!
Yassine Imounachen

ทำงานบน 10.12 ด้วย! บางทีความคิดเห็นของฉันเกี่ยวกับ 10.9 นั้นไม่ถูกต้อง แต่ฉันสังเกตเห็นว่าคุณต้องแน่ใจว่าคุณลากมันไปยังส่วนของ Dock ด้านล่างตัวแยก ฉันไม่มีวิธีทดสอบ 10.9 อีกครั้งน่าเสียดาย
stiemannkj1

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

5

ฉันคิดว่ากระทู้นี้อาจมีประโยชน์: http://forums.macosxhints.com/archive/index.php/t-70973.html

ในการถอดความคุณสามารถเปลี่ยนชื่อด้วยส่วนขยาย. คำสั่งหรือสร้าง AppleScript เพื่อเรียกใช้เชลล์


อย่างน้อยที่สุดบน Snow Leopard การเพิ่มนามสกุลคำสั่ง. ให้กับสคริปต์ทำให้มันรันในเทอร์มินัลหากคุณดับเบิลคลิกที่มัน แต่ด้วยเหตุผลบางประการคุณยังไม่สามารถลากมันเข้าไปใน Dock ได้ แต่ข้อเสนอแนะของ dbr และ Jeremy นั้นใช้ได้สำหรับฉันแล้ว
Jo Liss

5

ตามที่โจพูดไว้แล้วการสร้างเชลล์สคริปต์จากนั้นสร้างสคริปต์ applescript เพื่อเรียกใช้เชลล์สคริปต์จะทำให้สำเร็จและมีประโยชน์มาก

เชลล์สคริปต์

  1. สร้างเชลล์สคริปต์ของคุณในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบตัวอย่างเช่น

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (สิ่งนี้จะเรียกใช้ w32 ที่ปฏิบัติการได้โดยใช้ mono framework)

  2. บันทึกเชลล์สคริปต์สำหรับตัวอย่าง "StartKeepass.sh" ของฉัน

Apple Script

  1. เปิด AppleScript Editor และเรียกใช้เชลล์สคริปต์

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - คำสั่ง applescript เพื่อเรียกคำสั่งเชลล์ภายนอก
    • "sh ...." - นี่คือเชลล์สคริปต์ของคุณ (พา ธ แบบเต็ม) สร้างขึ้นในขั้นตอนที่หนึ่ง (คุณยังสามารถเรียกใช้คำสั่งโดยตรงได้ฉันสามารถละเว้นเชลล์สคริปต์และเรียกใช้คำสั่งโมโนได้ที่นี่)
    • user name - ประกาศถึง applescript ที่คุณต้องการเรียกใช้คำสั่งในฐานะผู้ใช้ที่ระบุ
    • "<enter username here> - แทนที่ด้วยชื่อผู้ใช้ของคุณ (รักษาราคา) เช่น "josh"
    • password - ประกาศให้ใช้รหัสผ่านของคุณ
    • "<enter password here>" - แทนที่ด้วยรหัสผ่านของคุณ (รักษาราคา) ex "mypass"
    • with administrative privileges - ประกาศว่าคุณต้องการเรียกใช้ในฐานะผู้ดูแลระบบ

สร้าง. APP ของคุณ

  1. บันทึก applescript ของคุณเป็น filename.scpt ในกรณีของฉัน RunKeepass.scpt

  2. บันทึกเป็น ... applescript ของคุณและเปลี่ยนรูปแบบไฟล์เป็นแอปพลิเคชันส่งผลให้ RunKeepass.app ในกรณีของฉัน

  3. คัดลอกไฟล์แอปไปยังโฟลเดอร์แอพของคุณ


5

ในเครื่องมือแก้ไขสคริปต์:

do shell script "/full/path/to/your/script -with 'all desired args'"

บันทึกเป็นชุดแอปพลิเคชัน

ตราบใดที่คุณต้องการทำคือได้รับผลของสคริปต์สิ่งนี้จะใช้ได้ดี คุณจะไม่เห็น STDOUT หรือ STDERR


2
ฉันอยากจะแนะนำ: "บันทึกเป็นแอปพลิเคชัน BUNDLE" ชุดรวมเปิดตัวเร็วกว่าแอปพลิเคชันมาก
e.James

-3

มีคนเขียน ...

ฉันเพิ่งตั้งไฟล์ทั้งหมดที่ลงท้ายด้วย ".sh" เพื่อเปิดด้วย Terminal ใช้งานได้ดีและคุณไม่ต้องเปลี่ยนชื่อของเชลล์สคริปต์แต่ละตัวที่คุณต้องการเรียกใช้

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