ฉันเคยเห็นคำถามนี้ในเว็บไซต์นี้และทำให้ฉันถามคำถามนี้ ฉันต้องการทราบใน Unix พูดความแตกต่างระหว่างปฏิบัติการและเชลล์สคริปต์อะไร
ฉันเคยเห็นคำถามนี้ในเว็บไซต์นี้และทำให้ฉันถามคำถามนี้ ฉันต้องการทราบใน Unix พูดความแตกต่างระหว่างปฏิบัติการและเชลล์สคริปต์อะไร
คำตอบ:
ไฟล์เรียกทำงานหมายถึงไฟล์ใด ๆ ที่มีชุดบิตเรียกทำงานที่สามารถเรียกใช้งานได้ (แม้ว่าจะมีข้อผิดพลาดในการทำงานจริงของโปรแกรม)
เชลล์สคริปต์เป็นชนิดของไฟล์เรียกทำงานเฉพาะที่ตั้งใจจะตีความโดยเชลล์โดยใช้#!
คำสั่งเพื่อระบุล่าม
สคริปต์ไฟล์ที่:
เชลล์สคริปต์เป็นสคริปต์ที่มีล่ามเป็นเปลือก ในโลกยูนิกซ์“เปลือก” หมายถึงครอบครัวของเปลือกหอยที่มีลักษณะที่บอร์นเปลือก ; เชลล์ดังกล่าวที่ทันสมัย (ash, bash, ksh, zsh, …) เป็นไปตามมาตรฐานเชลล์POSIX โดยทั่วไปแล้วคำว่า "เชลล์" สามารถรวมล่ามคำสั่งอื่น ๆ เช่น csh, tcsh, ปลา, ...
ปฏิบัติการเป็นไฟล์ใด ๆ ที่สามารถดำเนินการ เพื่อให้สามารถเรียกใช้งานได้อย่างมีประสิทธิภาพไฟล์จะต้องมีคุณสมบัติสองประการ:
ls -l
: x
อักขระต้องอยู่ในคอลัมน์สิทธิ์รูปแบบของไฟล์ต้องเป็นรูปแบบที่ระบบรับรู้ว่าสามารถเรียกใช้งานได้ รูปแบบที่ปฏิบัติการสามารถแบ่งออกเป็นหลายประเภท:
#!
ตามด้วยพา ธ ไปยังไฟล์ ในการเรียกใช้ไฟล์ดังกล่าวเคอร์เนลจะเรียกใช้งานโปรแกรมล่ามและส่งพา ธ ไปยังสคริปต์เพื่อเป็นอาร์กิวเมนต์โปรดทราบว่าการปฏิบัติการนั้นขึ้นอยู่กับระบบ ตัวอย่างเช่นไบนารี amd64 Linux สามารถทำงานได้บนระบบ amd64 Linux แต่ไม่ใช่ในระบบ 32 บิต ไบนารีสำหรับ Android ไม่สามารถใช้งานได้กับการติดตั้ง Linux ปกติ ไฟล์ปฏิบัติการ Windows นั้นใช้งานได้กับ Linux เท่านั้นหากมี Wine อยู่ สคริปต์ที่เริ่มต้นด้วยการเป็นปฏิบัติการเฉพาะในกรณีที่มีโปรแกรมอยู่ที่#!/usr/local/bin/ruby
/usr/local/bin/ruby
เชลล์สคริปต์มักจะสามารถเรียกใช้งานได้ แต่อาจไม่สามารถเรียกใช้งานได้หากคุณไม่ได้รับอนุญาตให้เรียกใช้งาน คุณยังสามารถตีความมันได้โดยส่งต่อไปยังล่าม (เช่นbash /path/to/script
) - "ตีความมัน" เป็นวิธีแฟนซีในการพูดว่า "ดำเนินการ"
เชลล์สคริปต์:
เชลล์สคริปต์เป็นชุดคำสั่งที่จะถูกตีความโดยเชลล์ (โดยปกติจะเป็น sh หรือเชลล์ที่เข้ากันได้กับ sh หรือบางครั้งก็เป็นอีกอัน)
ชื่อสคริปต์สามารถ แต่ไม่จำเป็นต้องลงท้ายด้วย ".sh" หรือ ".bash" หรือ ".csh" เป็นต้น (ให้คำแนะนำเกี่ยวกับเชลล์ที่ควรจะเปิดตัวด้วย)
เพื่อความชัดเจนฉันจะถือว่า: ว่าชื่อสคริปต์และเปลือกมันควรจะมีการเปิดตัวในscript
bash
วิธีการทั่วไปที่จะเปิดตัวในเปลือกแล้วจะเป็น: หรือbash /absolute/path/to/the/script
bash ./relative/path/to/the/script
ด้วยวิธีนี้มันไม่จำเป็นต้องมีบิตที่สามารถเรียกใช้งานได้เนื่องจากมันถูกอ่านโดย bash เท่านั้นซึ่งจะประมวลผลเนื้อหา
มันสามารถนอกจากนี้ยังมีการตั้งค่า + x (ปฏิบัติการ) เพื่ออนุญาตให้มีการเปิดใช้งานได้โดยตรงจากเชลล์เซสชั่ปัจจุบันของคุณกับ: / แน่นอนเส้นทาง / / เพื่อการ / / script (หรือ ./relative/path/to/the/script) ระวัง: โดยปกติเมื่อเปิดตัวด้วยวิธีนี้มันจะเปิดตัวผ่านเชลล์ที่คุณพิมพ์หรือผ่านเชลล์ posix (พฤติกรรมนั้นขึ้นอยู่กับระบบปฏิบัติการ) ดังนั้นจึงอาจไม่ได้เป็นเชลล์ที่ควรจะรัน นั่นเป็นเหตุผลที่คุณสามารถ (และควร) ระบุเป็นบรรทัดแรกของสคริปต์: #! / path / to / good / shell ซึ่งระบุถึงระบบปฏิบัติการของคุณว่าสคริปต์นั้นควรเปิดใช้งานโดย / path / to / good / shell แทน
ปฏิบัติการ:
ไฟล์สั่งการเป็นไฟล์ที่มีการตั้งค่า "x" บิตสำหรับผู้ใช้ / กลุ่ม (s) ที่ควรเปิดใช้งาน โดยทั่วไปจะเป็น "ไบนารี" หรือสคริปต์
เคล็ดลับ: file /some/file
สามารถบอกคุณเพิ่มเติมเกี่ยวกับเนื้อหาของไฟล์ ลองfile /usr/bin/bash
หรือ file /etc/profile
ดูตัวอย่าง