Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

‘#!’ Trong Linux Shell Scripts là gì?

#! - Thường có biệt danh là shebang , shabang , hashbang , poundbang - chúng tôi sẽ gắn bó với shebang trong suốt thời gian của bài viết này.

Nó được tìm thấy ở phần đầu của vô số tập lệnh shell Linux - nhưng thực ra nó là gì? Hãy chia nhỏ nó.

Nó thường trông giống như thế này

#!/bin/bash

#! xuất hiện ở đầu tệp, thường là trên dòng đầu tiên, theo sau là đường dẫn đến tệp thực thi (trong trường hợp này là bash vỏ).

Đó là một nhận xét

Nó bắt đầu bằng #, do đó, nó không được thực thi như một phần của chính tập lệnh - tuy nhiên, nó ảnh hưởng đến cách tập lệnh hoạt động, bởi vì

Nó tuân theo Chỉ thị Thông dịch viên

shebang cho hệ thống biết trình thông dịch nào sẽ sử dụng để chạy tập lệnh bằng cách cung cấp cho nó một đường dẫn đến trình thông dịch thực thi.

  • Nó thường được đặt ở đầu tệp, trên dòng đầu tiên để trình thông dịch chính xác có thể xử lý phần còn lại của tệp.
  • Đường dẫn đã cho phải là đường dẫn tuyệt đối đến một tệp thực thi phù hợp
  • Dòng shebang có thể chứa các tùy chọn có thể được chuyển cho trình thông dịch, nhưng hỗ trợ về điều này khác nhau tùy thuộc vào môi trường của bạn - an toàn nhất là chỉ bao gồm một tùy chọn duy nhất.

Ví dụ

Dưới đây là một số #! ví dụ và ý nghĩa của chúng:

bash

#!/bin/bash

Đặt dòng này ở đầu tập lệnh sẽ cho hệ thống biết nó phải được thực thi bằng cách sử dụng bash shell thực thi.

zsh

#!/bin/zsh

Đặt dòng này ở đầu tập lệnh sẽ cho hệ thống biết nó phải được thực thi bằng cách sử dụng zsh shell thực thi.

Đọc bài viết của chúng tôi về sự khác biệt giữa bash zsh đây!

Python

#!/usr/bin/env python3

Thực thi tập lệnh bằng Python 3. Lưu ý ở đây rằng thay vì chỉ định đường dẫn đến python3 có thể thực thi, dòng này tìm tệp thực thi python3 hiện được xác định cho môi trường của người dùng.

Không có gì!

#!/bin/false

Trả về mã trạng thái lỗi và không thực thi tập lệnh. Được sử dụng trong các tập lệnh không nhằm mục đích thực thi trực tiếp.

Bỏ qua #!

Nếu bạn đang chạy một tập lệnh có #! như vậy:

./myscript.sh

Đây myscript.sh là tên kịch bản của bạn - shebang được sử dụng để xác định thông dịch viên sẽ được sử dụng.

Ở trên chỉ có thể được thực hiện trên các tập lệnh mà người dùng hiện tại có quyền thực thi sự cho phép.

Tuy nhiên, nếu bạn làm như sau:

bash myscript.sh

… The shebang dòng không được sử dụng để xác định trình thông dịch sẽ được sử dụng, như chúng tôi đã chỉ định bash trong lệnh được sử dụng để gọi nó. Chỉ cần có quyền đọc đối với tập lệnh để thực hiện việc này, vì tập lệnh không được thực thi, bash đang được thực thi.