ทำไมไม่ทำให้ไฟล์. txt แทนไฟล์. sh เพื่อเรียกใช้สคริปต์


18

ฉันสงสัยว่าต้องใส่คำสั่งที่เรียกใช้งานได้ใน.shไฟล์เพื่อสร้างสคริปต์เดียวเนื่องจากฉันสามารถทำเช่นเดียวกันได้โดยใส่คำสั่งไว้ใน.txtไฟล์และทำให้สามารถใช้งานchmodได้

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


19
ตามปกติ Unix จะไม่สนใจเกี่ยวกับนามสกุลไฟล์ ดังนั้นคุณถูกต้อง - มันไม่สำคัญ มันเป็นการทำให้ผู้อ่านเห็นได้อย่างชัดเจนว่าเป็นเชลล์สคริปต์
vidarlo

8
ส่วนขยายไฟล์ใน Linux ไม่ได้ถูกใช้โดยระบบปฏิบัติการไม่ว่าในรูปแบบใด การใส่นามสกุล. sh เป็นการบอกผู้ใช้ว่าเป็นเชลล์สคริปต์ซึ่งตรงข้ามกับไฟล์ประเภทอื่น ๆ เช่นสคริปต์ไพ ธ อนหรือ Perl โดยส่วนตัวฉันไม่ได้ใส่ส่วนขยายลงในสคริปต์ของฉัน
doneal24

2
จำเป็นเท่านั้นที่จะบอกคุณหรือใครก็ตามที่มองว่าเป็นเชลล์สคริปต์ หากคุณไม่สนใจที่จะบอกว่าไฟล์. txt ใดเป็นสคริปต์ที่จะเรียกใช้และเป็นข้อความที่จะเปิดในโปรแกรมแก้ไขโปรดตั้งชื่อทุกอย่างให้เป็น. txt!
daboross

2
Right.txt, but.txt if.txt ทุกอย่าง.txt.txt ends.txt with.txt the.txt .txt suffix.txt, คุณกำลัง. txt not.txt กำลังช่วย. txt yourself.txt (or.txt anybody.txt อื่น ๆ .txt) เข้าใจ.txt what.txt each.txt file.txt is.txt there.txt for.txt
leftaroundabout

1
คำถามนี้คล้ายกับคำถามที่ซ้ำกัน แต่คำถามนั้นไม่ได้ตอบคำถามนี้
Kenny Evitt

คำตอบ:


47

ไม่จำเป็นต้องมีนามสกุลไฟล์เพื่อจับคู่สิ่งที่เฉพาะเจาะจงในขณะที่คุณพบอย่างถูกต้อง

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

ตรวจสอบfileคำสั่งมันจะแสดงข้อมูลที่สามารถค้นหาเกี่ยวกับประเภทไฟล์จากเนื้อหา

สำหรับสคริปต์ที่ปฏิบัติการระบบคาดว่าจะเรียกว่า "shebang" ในบรรทัดแรกซึ่งมีลักษณะเช่น

#!/usr/bin/env python3

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

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

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

นอกจากนี้คุณยังสามารถดูได้ว่าDo-นามสกุลไฟล์มีวัตถุประสงค์ใด ๆ (สำหรับระบบปฏิบัติการ)?


3
นามสกุลไฟล์ไม่สำคัญในเชลล์ แต่ในโลกของระบบปฏิบัติการ GUI คุณต้องการให้มันทำงานได้อย่างถูกต้อง
BallpointBen

@ Ballpoint ทั้งสองจุดนั้นไม่เกี่ยวข้องกัน แม้จะอยู่ภายใต้ GUI "ประเภท" ของไฟล์สามารถจัดเก็บไว้ข้างเคียงเป็นข้อมูลเมตาและสามารถเรียกใช้การดำเนินการเฉพาะโดยไม่คำนึงถึงการมีส่วนขยาย MacOS ไม่ได้มีส่วนขยายชื่อไฟล์และเป็น GUI และมีชีวิตอยู่ได้เป็นอย่างดี ...
แพทริค Mevzek

1
@PatrickMevzek MacOS ไม่มีส่วนขยายอย่างไร? ฉันเปิดใช้งานการแสดงพวกเขาและไฟล์ทั้งหมดมีพวกเขา ฉันพลาดอะไรไปรึเปล่า ? ฉันใหม่สำหรับแพลตฟอร์ม MacOS
Ciprian Tomoiagă

1
@ CiprianTomoiagăคุณสามารถตั้งชื่อไฟล์ของคุณได้ตามที่คุณต้องการระบบปฏิบัติการไม่ต้องการให้ส่วนขยายทำงานได้อย่างถูกต้อง ดูตัวอย่าง: howtogeek.com/192628/…
Patrick Mevzek

1
@barbecue กำหนดเป้าหมายตัวส่วนร่วมที่ต่ำที่สุด ... สิ่งที่สามารถผิดกับ :-) (เช่นการโจมตีผ่านไฟล์แนบอีเมลที่เรียกว่า something.com.txt และทำเทคนิคเพื่อข้าม. txt เป็น .com ตามความหมายเฉพาะใน Windows-land ) แน่นอนสำหรับนามสกุลไฟล์ทำงานร่วมกันอาจเป็นแนวปฏิบัติที่ดี สิ่งหนึ่งคือการเรียนรู้ว่านี่เป็นข้อบกพร่องที่ชัดเจนของ DOS โดยทั่วไปและระบบปฏิบัติการต่าง ๆ มีความสุขกับไฟล์ที่ไม่มีนามสกุล
Patrick Mevzek

3

ไม่มีสิ่งนั้นเป็นไฟล์ "นามสกุล" หรือ "ประเภท" ในชื่อไฟล์ UNIX / Linux

ดังที่คนอื่น ๆ ชี้ให้เห็น "ประเภท" อาจพบได้โดยใช้คำสั่ง file โดยสมมติว่ามีเวทมนตร์ที่เกี่ยวข้องในระบบของคุณ โดยปกติชื่อไฟล์ UNIX / Linux สามารถมีอักขระใด ๆ ที่ใช้ได้ แต่มักจะมีประโยชน์ในการใช้รูปแบบของการประชุมเพื่อชื่อเพื่อให้ทั้งมนุษย์และเครื่องจักรสามารถตัดสินได้ว่าเนื้อหา (และการใช้เนื้อหา)

ตัวอย่างเช่นฉันมักใช้เครื่องหมายจุลภาคเป็นอักขระตัวแรกของชื่อไฟล์เพื่อระบุไฟล์ชั่วคราวแทนที่จะใช้บางอย่างเช่นสตริง ".tmp" ที่ท้ายชื่อไฟล์ ผลลัพธ์จะเหมือนกันคือไฟล์ที่มีข้อมูลซึ่งจำเป็นสำหรับช่วงเวลาสั้น ๆ เท่านั้น แต่ชื่ออาจไม่จำเป็นต้องมี "" ภายในหรือสตริง "tmp" บางครั้งสิ่งนี้อาจมีข้อดีเช่นเมื่อแยกวิเคราะห์รายการชื่อไฟล์ แต่มันเป็นแบบแผนของฉันและคนอื่น ๆ อาจตัดสินใจอื่นแม้จะใช้ ".tmp" เป็นแบบแผนของชื่อไฟล์ชั่วคราว

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


FWIW ฉันยังใช้การประชุมที่ไม่ได้มาตรฐานสำหรับตัวเอง สคริปท์ของฉันที่ชื่อเริ่มต้น"."นั้นมีจุดประสงค์ให้เชลล์เป็นจุด (ไม่สามารถเรียกใช้ในเชลล์ย่อย) ตามลําดับฉันปิดใช้งานการประชุม "initial dot = hidden file" เริ่มต้นในนามแฝง / สคริปต์ของฉันซึ่งใช้lsเพื่อให้ฉันสามารถดูไฟล์ทั้งหมดรวมถึง "ซ่อน" ในทำนองเดียวกันกับ Windows ฉันปิดการใช้งานการตั้งค่า "ซ่อนไฟล์นามสกุล"
jrw32982 รองรับ Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.