บนวิกิพีเดียบทความสำหรับ. shพูดว่า:
หอยยูนิกซ์อื่น ๆ ล่ะ?
ฉันรู้ว่าshebang ถูกนำมาใช้ภายในไฟล์เพื่อระบุล่ามสำหรับการดำเนินการ แต่ผมสงสัยว่า:
- ข้อดีและข้อเสียของไฟล์นามสกุลคืออะไรและไม่มีนามสกุลไฟล์?
บนวิกิพีเดียบทความสำหรับ. shพูดว่า:
หอยยูนิกซ์อื่น ๆ ล่ะ?
ฉันรู้ว่าshebang ถูกนำมาใช้ภายในไฟล์เพื่อระบุล่ามสำหรับการดำเนินการ แต่ผมสงสัยว่า:
คำตอบ:
ฉันจะเรียกเฉพาะ.sh
สิ่งที่ตั้งใจพกพาเท่านั้น (และหวังว่าจะพกพาได้)
มิฉะนั้นฉันคิดว่ามันเป็นการดีกว่าที่จะซ่อนภาษา ผู้อ่านระวังจะพบมันในบรรทัด shebang ต่อไป (ในทางปฏิบัติ.bash
หรือ.zsh
อื่น ๆ …ไม่ได้ใช้คำต่อท้าย)
ฉันจะบอกว่าไม่มี "แนวทางปฏิบัติที่ดี" สำหรับส่วนขยายไฟล์ที่มีอยู่อย่างเคร่งครัดในด้านเทคนิค: ระบบไฟล์ Unix / Linux / * BSD ไม่สนับสนุนส่วนขยายต่อ se สิ่งที่คุณกำลังเรียกใช้ส่วนขยายเป็นเพียงคำต่อท้ายของชื่อไฟล์เดียว ซึ่งแตกต่างจากระบบไฟล์ VM / CMS, VMS, MS-DOS และ Windows และระบบปฏิบัติการที่มีจุดพิเศษใน inode-Moral-Equal เทียบเท่ากับส่วนขยาย
ตอนนี้ฉันคิดว่ามันโง่ไปหน่อยที่จะใส่คำต่อท้าย ".sh" หรือ ".ksh" หรือ ".bash" ลงในชื่อไฟล์สคริปต์เชลล์ โปรแกรมคือโปรแกรม: ไม่มีประโยชน์ในการแยกแยะสิ่งที่ถูกดำเนินการ ไม่มียูนิกซ์หรือลินุกซ์หรือเคอร์เนลอะไรก็ได้ที่ตัดสินใจเรียกล่ามในไฟล์บางไฟล์เพียงเพราะคำต่อท้ายชื่อไฟล์ มันทำโดย#!
สายหรือลำดับ "หมายเลขเวทมนตร์" อื่น ๆ ของไบต์ที่จุดเริ่มต้นของไฟล์ ในความเป็นจริงการตัดสินใจว่าจะดำเนินการตามชื่อไฟล์ "นามสกุล" เป็นหนึ่งในปัจจัยที่ทำให้ Windows เป็นแม่เหล็กมัลแวร์ ดูจำนวนการหลอกลวงของมัลแวร์ Windows ที่เกี่ยวข้องกับไฟล์ชื่อ "something.jpg.exe" - โดยค่าเริ่มต้นที่ใหม่กว่า Windows จะไม่แสดงนามสกุล ".exe" และสนับสนุนให้ผู้ใช้คลิกสองครั้งที่ "
สิ่งที่คุณอาจคิดว่าเป็นคำสั่งตรงไปตรงมามักจะเป็นเชลล์สคริปต์ บางครั้งcc
ได้รับ sh-script firefox
เป็น sh-script startx
เป็น sh-script ฉันไม่เชื่อว่ามีประโยชน์ทางความคิดหรือองค์กรในการทำเครื่องหมายสคริปต์ด้วยคำต่อท้าย ".sh"
.sh
ส่วนขยายของเชลล์สคริปต์คุณจะต้องพิมพ์.sh
ส่วนนั้นเป็นส่วนหนึ่งของชื่อคำสั่งเมื่อเริ่มต้น นั่นเป็นเหตุผลหลักว่าทำไมฉันไม่ชอบที่จะใส่ส่วนขยายนั้น (เหมือนกับสิ่งที่มีเส้น Shebang) BTW ปัญหาใน Windows ไม่ใช่.exe
คำนำหน้าต่อ se (มันเป็นเรื่องเล็กน้อยที่จะทำให้ปฏิบัติการที่มีชื่อimage.jpg
ใน Linux หลังจากทั้งหมด) แต่ความจริงที่ว่า Windows มักจะซ่อนส่วนขยายนั้นรวมกับความจริงที่ว่าการกระทำที่จำเป็นในการเริ่มปฏิบัติการและ เพื่อเปิดเอกสารเหมือนกันทุกประการ
ในฐานะที่เป็นคนที่ทำงานในสภาพแวดล้อมที่หลากหลายฉันต้องเขียนในเปลือกหอยที่หลากหลาย เชื่อหรือไม่ว่าในทุกแพลตฟอร์มเชลล์จะไม่เหมือนกัน ดังนั้นหากคุณบำรุงรักษาห้องสมุดส่วนตัวของคุณในหลาย ๆ เชลล์ (เมื่อจำเป็น) มันมีประโยชน์มากในการใช้ส่วนขยายเพื่อระบุ ID ของเชลล์ ด้วยวิธีนี้เมื่อคุณย้ายไปยังแพลตฟอร์มอื่นและเชลล์แตกต่างกันเล็กน้อยคุณรู้ว่าสคริปต์ใดที่จะกำหนดเป้าหมายสำหรับการแก้ไข .sh .ksh .bsh .csh ...
#!
สคริปต์ตอนเริ่มต้น (เช่น#!/bin/bash
) หรือไม่?
อย่างที่คุณพูดไว้ส่วนขยายไฟล์ Unix นั้นเป็นข้อมูลล้วนๆ คุณเพียงแค่ต้องการให้สคริปต์ของคุณมี shebang ที่ถูกต้องและสามารถเรียกใช้งานได้
.sh
คุณสามารถมีนามสกุลหรือไม่ใช้
ฉันใช้แบบแผนต่อไปนี้โดยไม่คำนึงถึงเชลล์ที่ใช้ (csh, tcsh, bash, sh, ... ):
.sh
สคริปต์คลาสสิกระดับต่ำถึงระดับสูงคุณไม่ควรใช้ส่วนขยายสำหรับไฟล์เรียกทำงานเนื่องจากส่วนขยายจะไม่สามารถใช้แทนกันได้ ลองนึกภาพว่าคุณมีเชลล์สคริปต์a.sh
แล้วเขียนใหม่ในไพa.py
ธ อนตอนนี้คุณต้องเปลี่ยนทุกโปรแกรมที่เรียกคุณว่าสคริปท์
สิ่งที่ทั้งนามสกุลไฟล์ชื่อใน Mircosoft ของ Windows เป็นระเบียบ: ยกตัวอย่างเช่นสิ่งที่จะได้รับa.audio, b.audio, c.audio
เป็นa.mp3, b.wav, c.ogg
และเป็นd.picture, e.picture, f.picture
d.jpeg, e.png, f.gif
เวลาส่วนใหญ่เราไม่สนใจรูปแบบเสียงหรือรูปภาพเรายังต้องใช้เวลาในการสอนนามสกุลไฟล์ทั้งหมดให้กับผู้ใช้ใหม่เป็นเวลานาน
*.sh
ฉันเพียงแค่วิ่งเข้าไปคือ Debian ของrun-parts
จะไม่เรียกใช้สคริปต์ที่มีส่วนขยายเช่นใน/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.html
ส่วนขยายของเชลล์สคริปต์มีประโยชน์มาก ตัวอย่างเช่นฉันมักจะเขียนสคริปต์ที่มีหลายไฟล์ในหลายภาษา (เช่น. bash, awk และ lua) ในไดเรกทอรีเดียวกัน ถ้าฉันต้องการค้นหาสตริงในไฟล์ทุบตีเท่านั้นส่วนขยายทำให้มันมีประโยชน์มากเพื่อลดผลบวกผิด ๆ หรือถ้าฉันต้องการนับจำนวนบรรทัดของรหัส bash ของฉันทั้งหมดสำหรับโครงการนั้น
เป็นความเจ็บปวดที่ต้องพิมพ์ส่วนขยายเมื่อเรียกใช้โปรแกรมดังนั้นฉันจึงสร้าง symlink โดยไม่ต้องมีส่วนขยายไปยังโปรแกรมหลักเพื่อแก้ไข / เรียกใช้โดยไม่จำเป็นต้องพิมพ์ส่วนขยายในแต่ละครั้ง Symlinks มีราคาถูกและใช้งานง่าย
อย่างที่คนอื่นพูดแล้วเชลล์ไม่สนใจเรื่องส่วนขยาย อย่างไรก็ตามมันช่วยให้สามารถระบุตัวตนของไฟล์ได้อย่างรวดเร็ว ฉันเห็นไฟล์ที่ลงท้ายด้วย.py
หรือ.sh
และฉันรู้ว่าสิ่งที่ควร (อย่างน้อย) ควรเป็นอะไร ดังที่สตีฟบอกว่าการค้นหาโดยใช้นามสกุลไฟล์หรือทำการนับบรรทัดก็เป็นสิ่งที่ควรพิจารณาในทางปฏิบัติ
bash script.sh
(หรือsh
แน่นอน)