#! – Thường gọi là shebang, shabang, hashbang, poundbang – chúng ta sẽ dùng shebang trong bài này.
Nó xuất hiện đầu dãy vô số script shell Linux – nhưng thực chất nó là gì? Hãy phân tích.
Thường trông như sau
#!/bin/bash
#! ở đầu file, thường dòng đầu, theo sau là đường dẫn tới file thực thi (trong trường hợp này là shell bash).
Nó là một comment
Bắt đầu bằng #, nên không được thực thi như phần script – nhưng nó ảnh hưởng cách script chạy, bởi vì…
Nó chỉ thị trình thông dịch (Interpreter Directive)
Shebang nói cho hệ thống biết dùng trình thông dịch nào để chạy script bằng cách cho đường dẫn tới file thực thi của trình thông dịch.
- Thường đặt đầu file, dòng 1, để trình thông dịch đúng xử lý phần còn lại.
- Đường dẫn phải là đường dẫn tuyệt đối tới file thực thi phù hợp
- Dòng shebang có thể chứa tùy chọn truyền cho trình thông dịch, nhưng hỗ trợ tùy môi trường – an toàn nhất chỉ đưa một tùy chọn đơn.
Ví dụ
Dưới đây là các ví dụ #! và ý nghĩa:
bash
#!/bin/bash
Dòng này đầu script báo hệ thống chạy script bằng file thực thi shell bash.
zsh
#!/bin/zsh
Dòng này báo hệ thống chạy script bằng file thực thi shell zsh.
Xem bài so sánh bash và zsh tại đây!
Python
#!/usr/bin/env python3
Chạy script bằng Python 3. Lưu ý: thay vì chỉ định đường dẫn tới python3, dòng này tìm python3 được định nghĩa trong môi trường user.
Không có gì!
#!/bin/false
Trả về mã lỗi và không chạy script. Dùng cho script không dự định chạy trực tiếp.
Bỏ qua #!
Nếu chạy script có #! như sau:
./myscript.sh
Ở đây myscript.sh là tên script – shebang dùng để xác định trình thông dịch.
Cách này chỉ làm được trên script mà user hiện tại có quyền execute.
Nhưng nếu bạn làm sau:
bash myscript.sh
…dòng shebang không dùng để xác định trình thông dịch, vì ta đã chỉ định bash trong lệnh gọi. Chỉ cần quyền read cho script, vì script không được thực thi, bash mới được thực thi.