#! – มักมีชื่อเล่นว่า shebang, shabang, hashbang, poundbang – เราจะใช้ shebang ตลอดบทความนี้
มันพบได้ที่จุดเริ่มต้นของ Linux shell scripts จำนวนมาก – แต่จริงๆ แล้วมันคืออะไร? มาแยกวิเคราะห์กัน
มักจะมีลักษณะประมาณนี้
#!/bin/bash
#! ปรากฏที่จุดเริ่มต้นของไฟล์ ปกติบรรทัดแรก ตามด้วย path ไปยัง executable (ในกรณีนี้คือ shell bash)
มันคือ Comment
มันขึ้นต้นด้วย # จึงไม่ถูก execute เป็นส่วนหนึ่งของสคริปต์เอง – แต่มันส่งผลต่อวิธีการทำงานของสคริปต์ เพราะว่า…
มันนำหน้า Interpreter Directive
shebang บอกระบบว่าให้ใช้ interpreter ไหนในการรันสคริปต์ โดยให้ path ไปยัง interpreter executable
- มักวางที่จุดเริ่มต้นของไฟล์ บรรทัดแรก เพื่อให้ interpreter ที่ถูกต้องจัดการส่วนที่เหลือของไฟล์
- Path ที่ให้ต้องเป็น absolute path ไปยัง executable ที่เหมาะสม
- บรรทัด shebang อาจมีตัวเลือกที่ส่งให้ interpreter ได้ แต่การรองรับแตกต่างไปตามสภาพแวดล้อม – ปลอดภัยที่สุดคือใส่แค่ตัวเลือกเดียว
ตัวอย่าง
ด้านล่างคือตัวอย่าง #! และความหมาย:
bash
#!/bin/bash
การวางบรรทัดนี้ที่จุดเริ่มต้นของสคริปต์จะบอกระบบว่าควร execute ด้วย bash shell executable
zsh
#!/bin/zsh
การวางบรรทัดนี้ที่จุดเริ่มต้นของสคริปต์จะบอกระบบว่าควร execute ด้วย zsh shell executable
อ่านบทความเกี่ยวกับความแตกต่างระหว่าง bash และ zsh ที่นี่!
Python
#!/usr/bin/env python3
Execute สคริปต์ด้วย Python 3 สังเกตว่าที่นี่ไม่ได้ระบุ path ไปยัง executable python3 โดยตรง แต่บรรทัดนี้จะหา python3 executable ที่กำหนดไว้ใน environment ของผู้ใช้
ไม่มีอะไรเลย!
#!/bin/false
คืนค่า failure status code และไม่ execute สคริปต์ ใช้ในสคริปต์ที่ไม่ได้ตั้งใจให้ execute โดยตรง
การข้าม #!
หากคุณรันสคริปต์ที่มี #! แบบนี้:
./myscript.sh
ที่นี่ myscript.sh คือชื่อสคริปต์ของคุณ – shebang ถูกใช้เพื่อตัดสินใจว่าใช้ interpreter ไหน
ข้างต้นทำได้ก็ต่อเมื่อสคริปต์มีสิทธิ์ execute สำหรับผู้ใช้ปัจจุบัน
แต่หากคุณทำดังนี้:
bash myscript.sh
…บรรทัด shebang ไม่ ถูกใช้เพื่อตัดสินใจ interpreter เนื่องจากเราระบุ bash ไว้ในคำสั่งที่เรียกใช้ ต้องการแค่สิทธิ์ read สำหรับสคริปต์ เนื่องจากสคริปต์ไม่ได้ถูก execute bash ถูก execute แทน