#! – มักมีชื่อเล่นว่า shebang , ชาบัง , แฮชบัง , poundbang – เราจะยึดติดกับ shebang ตลอดระยะเวลาของบทความนี้
พบได้ที่จุดเริ่มต้นของเชลล์สคริปต์ Linux นับไม่ถ้วน - แต่จริงๆ แล้วมันคืออะไร? มาทำลายมันกันเถอะ
ปกติจะหน้าตาประมาณนี้
#!/bin/bash
ที่ #! ปรากฏที่จุดเริ่มต้นของไฟล์ โดยปกติแล้วจะอยู่ที่บรรทัดแรก ตามด้วยพาธไปยังไฟล์สั่งการ (ในกรณีนี้ ไฟล์ bash เปลือก)
แสดงความคิดเห็น
เริ่มต้นด้วย #, ดังนั้นจึงไม่ได้ดำเนินการเป็นส่วนหนึ่งของตัวสคริปต์เอง อย่างไรก็ตาม จะส่งผลต่อการทำงานของสคริปต์ เพราะ …
ดำเนินการตามคำสั่งล่าม
The shebang บอกระบบที่ล่ามจะใช้เพื่อเรียกใช้สคริปต์โดยให้เส้นทางไปยังล่ามที่ปฏิบัติการได้
- มักจะวางไว้ที่จุดเริ่มต้นของไฟล์ ในบรรทัดแรก เพื่อให้ล่ามที่ถูกต้องสามารถจัดการส่วนที่เหลือของไฟล์ได้
- เส้นทางที่กำหนดต้องเป็น เส้นทางสัมบูรณ์ เป็นไฟล์ปฏิบัติการที่เหมาะสม
- สาย Shebang อาจมีตัวเลือกที่สามารถส่งผ่านไปยังล่ามได้ แต่การสนับสนุนในเรื่องนี้จะแตกต่างกันไปตามสภาพแวดล้อมของคุณ – การรวมตัวเลือกเดียวเท่านั้นจะปลอดภัยที่สุด
ตัวอย่าง
ด้านล่างนี้คือ #! ตัวอย่างและความหมาย:
ทุบตี
#!/bin/bash
การวางบรรทัดนี้ไว้ที่จุดเริ่มต้นของสคริปต์จะบอกระบบว่าควรดำเนินการโดยใช้ bash เชลล์ปฏิบัติการได้
zsh
#!/bin/zsh
การวางบรรทัดนี้ไว้ที่จุดเริ่มต้นของสคริปต์จะบอกระบบว่าควรดำเนินการโดยใช้ zsh เชลล์ปฏิบัติการได้
อ่านบทความของเราเกี่ยวกับความแตกต่างระหว่าง bash และ zsh ที่นี่!
หลาม
#!/usr/bin/env python3
เรียกใช้สคริปต์โดยใช้ Python 3 โปรดสังเกตว่า แทนที่จะระบุเส้นทางไปยัง python3 เรียกใช้งานได้ บรรทัดนี้จะค้นหาไฟล์ปฏิบัติการ python3 ที่กำหนดไว้ในปัจจุบันสำหรับสภาพแวดล้อมของผู้ใช้
ไม่มีอะไร!
#!/bin/false
ส่งกลับรหัสสถานะความล้มเหลวและไม่เรียกใช้สคริปต์ ใช้ในสคริปต์ที่ไม่ได้ตั้งใจให้ดำเนินการโดยตรง
ข้าม #!
หากคุณกำลังเรียกใช้สคริปต์ด้วย #! ชอบ:
./myscript.sh
ที่นี่ myscript.sh เป็นชื่อสคริปต์ของคุณ – the shebang ใช้เพื่อกำหนดว่าจะใช้ล่ามตัวใด
ด้านบนสามารถทำได้เฉพาะในสคริปต์ที่ผู้ใช้ปัจจุบันมีดำเนินการ ขออนุญาต
อย่างไรก็ตาม หากคุณทำสิ่งต่อไปนี้:
bash myscript.sh
…the ชีบัง บรรทัดคือไม่ ใช้เพื่อกำหนดว่าจะใช้ล่ามตัวใด ตามที่เราได้ระบุ bash ในคำสั่งที่ใช้เรียกมัน จำเป็นต้องอนุญาตการอ่านสำหรับสคริปต์เท่านั้นเนื่องจากสคริปต์ไม่ได้ถูกดำเนินการ bash กำลังดำเนินการ