Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

Shebang (#!) ใน Linux คืออะไร และใช้อย่างไร

Shebang หรือ #! (sharp-bang) คือลำดับตัวอักษร 2 ตัวแรกของไฟล์สคริปต์ บอก kernel ให้ใช้ interpreter ใดรันสคริปต์นี้ (bash, zsh, python, perl, ฯลฯ)

ทำไมต้องมี Shebang?

  • รันสคริปต์โดยตรง: ./script.sh แทน bash script.sh
  • ระบุ interpreter ชัดเจน ไม่ต้องจำ/พิมพ์ทุกครั้ง
  • ทำงานกับ cron, systemd, เบราว์เซอร์ (CGI), หรือสคริปต์เรียกสคริปต์อื่นได้ถูกต้อง
  • Portable: ย้ายไปเครื่องอื่นที่มี interpreter เดียวกันรันได้เลย

รูปแบบมาตรฐาน

#!/path/to/interpreter [optional-arg]

ตัวอย่างทั่วไป:

#!/bin/bash          # Bash (พบได้ทุก distro)
#!/bin/sh            # POSIX sh (portable กว่า)
#!/usr/bin/env bash  # ใช้ env หา bash ใน PATH (แนะนำ - portable กว่า)
#!/usr/bin/env python3
#!/usr/bin/perl
#!/usr/bin/node

วิธีใช้งาน

  1. สร้างไฟล์ ใส่ shebang บรรทัดแรก
  2. เขียนโค้ดต่อจากเฉพาะบรรทัดที่ 2
  3. ทำให้ executable: chmod +x script.sh หรือ chmod 755 script.sh
  4. รัน: ./script.sh

ตัวอย่างสคริปต์ Bash:

#!/usr/bin/env bash
# backup.sh - Simple backup script
src="/home/user/Documents"
dst="/mnt/backup/$(date +%F)"
mkdir -p "$dst"
rsync -av --delete "$src/" "$dst/"
echo "Backup completed to $dst"

ตัวอย่าง Python:

#!/usr/bin/env python3
import json, sys
with open(sys.argv[1]) as f:
    data = json.load(f)
print(json.dumps(data, indent=2, sort_keys=True))

Shebang กับ /usr/bin/env

#!/usr/bin/env bash ดีกว่า #!/bin/bash เพราะ:

  • หา interpreter จาก PATH (ทำงานแม้ bash อยู่ /usr/local/bin, /opt/homebrew/bin, ฯลฯ)
  • ทำงานบน macOS, BSD, Linux ได้เหมือนกัน
  • รองรับ virtual environment (python, node, ruby)

ข้อจำกัด

  • Shebang ต้องอยู่บรรทัดที่ 1 ตัวอักษรที่ 1-2 เท่านั้น
  • บาง kernel จำกัดความยาว shebang (ประมาณ 128 chars)
  • ไม่ทำงานบน Windows (ยกเว้น WSL/Git Bash) - Windows ใช้ file association แทน

สรุป

Shebang เป็น "ประทับตรา" ของสคริปต์ บอกระบบว่าตัวมันคืออะไร ควรใส่ทุกสคริปต์ที่ต้องการรันโดยตรง ใช้ #!/usr/bin/env interpreter สำหรับ portability สูงสุด