ทำไม "เธอปัง" เริ่มต้นด้วย#!
เช่น#!/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 …) รวมถึงคำอธิบายว่าทำไม#
(ใช่แล้วบรรทัดต้องถูกละเว้นโดยเชลล์ที่มีอยู่)