ฉันจะทำให้ไฟล์นี้ปฏิบัติการได้อย่างไรผ่านการดับเบิลคลิก?


165

ก่อนอื่นฉันใช้ Mac

ต่อไปฉันต้องเรียกใช้งาน "file.sh" นี้เราจะเรียกมันว่า ทุกครั้งที่ฉันต้องเรียกใช้งานฉันต้องเปิด Terminal และพิมพ์:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

ไม่เป็นไร แต่ฉันรู้สึกว่ามันจะเร็วกว่านี้ถ้าฉันทำให้ไฟล์ทำงานด้วยการดับเบิลคลิกคุณไม่คิดเหรอ?

ดังนั้นคำถามของฉันคือฉันจะทำให้ไฟล์นี้ทำงานด้วยการดับเบิลคลิกได้อย่างไร

ความคิดของฉันคือ:

a) พิมพ์ chmod ลงในเทอร์มินัลแล้วเปลี่ยนการอนุญาต

b) ทำไฟล์ใส่โค้ดที่ฉันเขียนไว้ด้านบน ^ แล้วทำให้ไฟล์นั้นทำงานได้หรือไม่

c) สร้างระบบอัตโนมัติเพื่อทำสิ่งนี้?

วิธีไหนดีที่สุดหรือมีวิธีที่ดีกว่า โปรดอธิบายให้มากที่สุดเท่าที่คุณสามารถทำได้ฉันยังใหม่กับเทอร์มินัล ขอบคุณ


1
หากคุณต้องการสคริปต์ที่ดีและคลิกง่ายใช่แล้ว Automator เป็นเครื่องมือที่เหมาะสม คุณดูเหมือนจะรู้ว่าจากคำถามของคุณดังนั้นคำถามของคุณคืออะไร
Rob Napier

คำถามเดียวกัน แต่ฉันมี jdk dmg, โฟลเดอร์แอพบางอันสำหรับสร้างไอคอน, Jar บางอัน .. แต่ฉันไม่สามารถเรียกใช้ / สร้างผ่าน automator หรือ. คำสั่ง
SANTOSH

คำตอบ:


350

โดยค่าเริ่มต้น*.shไฟล์จะถูกเปิดในโปรแกรมแก้ไขข้อความ (Xcode หรือ TextEdit) ในการสร้างเชลล์สคริปต์ที่จะทำงานใน Terminal เมื่อคุณเปิดให้ตั้งชื่อด้วยนามสกุล "คำสั่ง" เช่นfile.commandเช่น โดยค่าเริ่มต้นสิ่งเหล่านี้จะถูกส่งไปยัง Terminal ซึ่งจะเรียกใช้ไฟล์เป็นเชลล์สคริปต์

คุณจะต้องตรวจสอบให้แน่ใจว่าไฟล์นั้นสามารถเรียกใช้งานได้เช่น:

chmod +x file.command

หากไม่มีสิ่งนี้ Terminal จะปฏิเสธที่จะดำเนินการ

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

นอกจากนี้โปรดทราบว่า Terminal จะเรียกใช้งานเชลล์สคริปต์โดยไม่ต้องเปลี่ยนไดเรกทอรีทำงาน คุณจะต้องเริ่มต้นสคริปต์ด้วยcdคำสั่งหากคุณต้องการให้มันทำงานกับไดเรกทอรีที่ใช้งานได้


1
ขอบคุณสำหรับคำตอบที่เป็นประโยชน์เพิ่มเติม
Jacob

46
นอกจากนี้คุณสามารถใช้cd "`dirname "$0"`"เพื่อตั้งค่าไดเรกทอรีการทำงานปัจจุบันเป็นไดเรกทอรีที่เชลล์สคริปของคุณอยู่
gearsdigital

3
เพื่อความสวยงามคุณควรคลิกขวาที่ไฟล์. command และเปิดข้อมูลข่าวสาร คุณมีตัวเลือกในการซ่อนคำต่อท้าย (ภายใต้ชื่อ & คำต่อท้าย)
Bijan

ฉันใช้วิธีนี้เพื่อเรียกใช้แอพด้วยopen -n ...คำสั่ง ใช้งานได้ แต่ทุกครั้งที่หน้าต่างเทอร์มินัลเปิดขึ้นและแสดงให้ฉันเห็น "[เสร็จสิ้นกระบวนการ]" เป็นไปได้ไหมที่จะป้องกันไม่ให้หน้าต่าง Terminal ปรากฏขึ้น
Nik

1
@ Nik ไม่มีจุดที่จะเรียกใช้ใน Terminal ถ้าคุณไม่ต้องการให้แสดงในหน้าต่างเทอร์มินัล แต่ให้เป็นกลุ่มแอปพลิเคชันที่สามารถเรียกใช้งานได้เป็นสคริปต์ shebang หรือสร้างแอปเพล็ต AppleScript หรือ Automator ที่เรียกใช้สคริปต์ คุณยังสามารถใช้การตั้งค่าเทอร์มินัลเพื่อเปลี่ยนโปรไฟล์เพื่อปิดหน้าต่างเมื่อกระบวนการจบการทำงาน แต่นั่นไม่ใช่ทางออกที่ดีที่สุดหากคุณต้องการเรียกใช้เชลล์สคริปต์โดยไม่ต้องมีการโต้ตอบกับผู้ใช้
Chris หน้า

31

ลบส่วนขยายทั้งหมดแล้วคลิกสองครั้งที่ส่วนขยาย สคริปต์ของเชลล์ระบบส่วนใหญ่เป็นแบบนี้ ตราบใดที่มันมีShebangก็จะทำงานได้


1
BTW, "shebang" ส่วนใหญ่เป็นบรรทัดนี้ต่อหน้าบรรทัดใด ๆ : #! / bin / sh แต่อาจแตกต่างกันโปรดอ่านลิงก์ที่ให้ไว้สำหรับกรณีอื่น
Lukas Liesis

วิธีนี้ไม่จำเป็นต้องทำ chmod หรือไม่?
Atul

11

คุณสามารถบอก Finder เพื่อเปิด.shไฟล์ใน Terminal:

  1. เลือกไฟล์
  2. รับข้อมูล (cmd-i) กับมัน
  3. ในส่วน "เปิดด้วย" เลือก "อื่น ๆ ... " ในเมนูป๊อปอัพ
  4. เลือกเทอร์มินัลเป็นแอปพลิเคชัน

สิ่งนี้จะมีผลเหมือนกับการเปลี่ยนชื่อเป็น.commandยกเว้น ... คุณไม่ต้องเปลี่ยนชื่อ :)


8
  1. เรียกใช้ Terminal
  2. ประเภท -> ชื่อไฟล์นาโน
  3. วางเนื้อหาไฟล์แบทช์และบันทึก
  4. ประเภท -> chmod + x ชื่อไฟล์
  5. มันจะสร้างไฟล์ exe ตอนนี้คุณสามารถดับเบิลคลิกและมัน

ชื่อไฟล์ควรอยู่ในเครื่องหมายคำพูดคู่ เนื่องจากฉันใช้ Mac-> ในกรณีเนื้อหาของแบตช์ไฟล์คือ

cd / Users / yourName / Documents / SeleniumServer

java -jar selenium-server-standalone-3.3.1.jar-hub ฮับ

มันจะทำงานได้อย่างแน่นอน


0

คุณสามารถเปลี่ยนไฟล์ที่ปฏิบัติการได้โดยใช้chmodสิ่งนี้

chmod 755 file.sh

และใช้คำสั่งนี้เพื่อดำเนินการ

./file.sh

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