Có sự khác biệt nào giữa các lệnh mà bạn nhập vào terminal và các lệnh bạn đưa vào trong một tập lệnh không?
Có sự khác biệt nào giữa các lệnh mà bạn nhập vào terminal và các lệnh bạn đưa vào trong một tập lệnh không?
Câu trả lời:
Thiết bị đầu cuối của bạn chạy shell (rất có thể bash
), đây là thiết bị yêu cầu các lệnh của bạn và chạy chúng.
Bên cạnh chế độ tương tác này, bạn cũng có thể sử dụng trình bao của mình để chạy các lệnh từ một tệp. Để thực thi các lệnh trong tệp của bạn, bạn có thể gọi shell trực tiếp bash script
hoặc bạn có thể bắt đầu tệp của mình bằng "shebang" #!/bin/bash
và làm cho nó có thể thực thi được ( chmod +x script
). Sau đó, bạn có thể coi tập lệnh như một tệp nhị phân và thực hiện nó chẳng hạn như ./script
hoặc đặt nó tại một nơi mà trình bao của bạn đang tìm kiếm nó. (echo $PATH
)
Rất có thể cả vỏ tương tác của bạn và vỏ được sử dụng để chạy là bash
. Từ quan điểm của một bash "ngày học linux đầu tiên" hoạt động giống hệt nhau trong cả hai chế độ. - Nhiều sau này bạn có thể vấp ngã về sự khác biệt nhỏ. Nếu bạn thực sự muốn biết về chi tiết tôi sẽ đề nghị đọcman bash
và tìm kiếm những nơi đề cập đến "tương tác". (Bạn có thể tìm kiếm một trang người đàn ông, bằng cách nhấn /
.)
Một điều quan trọng cần lưu ý là kịch bản được chạy như một quy trình mới. Điều này đặc biệt có nghĩa là các biến được đặt trong tập lệnh không hiển thị trong vỏ gọi.
$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$
Không có xuất khẩu a
thậm chí không thể nhìn thấy tập lệnh bên trong.
Nói chung, câu trả lời sẽ là "không", các lệnh trong shell giống nhau trong các tập lệnh, về cú pháp và ngữ nghĩa.
Nhưng có một loạt các sắc thái nhỏ liên quan đến cấu hình môi trường (biến nào được sử dụng và biến chúng được đặt).
Shell tương tác được lựa chọn cho Linux là bash, nhưng scripting thường sử dụng các trình thông dịch khác ( sh
vốn là tiền thân của bash
, ksh
tương đương với bash), vì vậy bạn phải tính đến shell nào được sử dụng (tên shell hiện tại Theo truyền thống được tổ chức trong biến SHELL
, hãy thử gõ echo $SHELL
).
có thể có sự khác biệt về cấu hình của cùng một trình thông dịch cho phiên tương tác và để thực thi tập lệnh.
Không. Tập lệnh là danh sách các lệnh bạn có thể nhập vào thiết bị đầu cuối.
Bạn có thể dán toàn bộ tập lệnh vào thiết bị đầu cuối và kết quả sẽ giống như chạy tập lệnh.
Ngược lại, bạn có thể "lưu" các lệnh đầu cuối của mình bên trong tệp và biến nó thành tập lệnh có thể sử dụng lại và chia sẻ nó với gia đình và bạn bè của bạn.
source script_file
. sẽ chỉnh sửa các lọ ENV trong bối cảnh hiện tại. trong khi chạy tập lệnh như ./script_file
sẽ không sửa đổi ENV, trừ khi export
được sử dụng rõ ràng.
export
một kịch bản không thể sửa đổi bất kỳ biến nào của vỏ gọi. Điều tương tự cũng xảy ra với những thứ như PWD, các bí danh được xác định, các hàm và những thứ tương tự. Chúng chỉ có thể được thay đổi tương tác hoặc bằng cách tìm nguồn cung cấp một tệp. Nhưng vâng, đó có lẽ không có gì ai đó sẽ vấp ngã vào ngày đầu tiên. :)