ทำไม "เธอปัง" เริ่มต้นด้วย#!เช่น#!/bin/bash? ฉันยอมรับเสมอว่านี่เป็นวิธีที่ทำได้ แต่มีเหตุผลอยู่เบื้องหลังหรือไม่
ทำไมเริ่มต้นด้วย#; นั่นไม่ใช่ความคิดเห็นใช่ไหม หรือเป็นประเด็นที่ควรแสดงความคิดเห็น?
ทำไม "เธอปัง" เริ่มต้นด้วย#!เช่น#!/bin/bash? ฉันยอมรับเสมอว่านี่เป็นวิธีที่ทำได้ แต่มีเหตุผลอยู่เบื้องหลังหรือไม่
ทำไมเริ่มต้นด้วย#; นั่นไม่ใช่ความคิดเห็นใช่ไหม หรือเป็นประเด็นที่ควรแสดงความคิดเห็น?
คำตอบ:
โดยทั่วไปshebangหมายถึงเพียงแค่#!( !เรียกว่า "ปัง" และดูเหมือนว่า "เธอ" คือความเสียหายของทั้ง "SHArp" หรือ "haSH" สำหรับ#) - ทั้งสายเรียกว่าเส้น Shebang
มันตั้งใจเริ่มต้นด้วยตัวอักษรความคิดเห็นสำหรับความเข้ากันได้ย้อนหลังกับสิ่งที่ไม่รู้วิธีจัดการมัน !สันนิษฐานว่าเป็นเพียงความแตกต่างจากความคิดเห็นสุ่มเริ่มต้นไฟล์ดังนั้นไฟล์ที่เริ่มต้นด้วยการ# this is my script!ไม่พยายามที่จะเรียกใช้this is my script!ล่าม
!ครั้งมักใช้ในบริบทอื่นเพื่อระบุคำสั่งที่จะดำเนินการ ตัวอย่างเช่นในvimหรือโปรแกรมอื่น ๆ ที่มีบรรทัดคำสั่งของตัวเองปังมักจะเป็นตัวหนีที่ทำให้พวกเขาเรียกใช้คำสั่งในเปลือกระบบแทนส่วนต่อประสานภายในของพวกเขา
เพื่อให้เข้าใจสิ่งนี้คุณต้องตระหนักว่าบรรทัดแรกของสคริปต์นั้นถูกอ่านสองครั้งโดย 2 โปรแกรมที่แตกต่างกัน ในครั้งแรกเคอร์เนลจะเปิดไฟล์และค้นหาลำดับอักขระ ( #!) ที่บรรทัดแรก หากพบมันจะรันโปรแกรมเชลล์ที่ระบุไว้ที่นั่นส่งชื่อไฟล์เป็นพารามิเตอร์ (เช่นหากไฟล์/home/me/fooเริ่มต้น#!/bin/shเคอร์เนลจะทำงาน/bin/sh /home/me/foo)
ถัดไปเชลล์ ( bin/shหรือโปรแกรมล่ามอะไรก็ตามที่ระบุ) อ่านไฟล์ เชลล์ไม่รู้อะไรเกี่ยวกับเส้น shebang แต่มันจะยังอ่านบรรทัดแรกเพราะมันเหมือนกับบรรทัดอื่น ๆ ในไฟล์ ... มันอ่านมันทั้งหมด คุณไม่ต้องการให้เชลล์ขัดข้องหรือเปลี่ยนพฤติกรรมของมันในทางใดทางหนึ่ง ... วิธีที่จะทำคือทำให้มันถือว่าเป็นความคิดเห็นและไม่สนใจมัน ดังนั้นตัวละครที่ดีที่สุดสำหรับคำสั่งเคอร์เนลที่จะเริ่มต้นก็คือตัวอักษรความคิดเห็น
มันจะต้องมีความคิดเห็นเพราะวิธีนี้มันจะทำงานเพื่อเรียกใช้สคริปต์เช่น "interpretername scriptname" ฉันไม่รู้เกี่ยวกับต้นกำเนิดของ "!"
#!(เท่าที่จำได้ว่าเป็น DMR …) รวมถึงคำอธิบายว่าทำไม#(ใช่แล้วบรรทัดต้องถูกละเว้นโดยเชลล์ที่มีอยู่)