Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Shebang (#!) giải thích: Tại sao script Linux cần nó

#! – 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.