Sự khác biệt giữa các lệnh trong bash script và các lệnh trong terminal


13

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?


Hoàn toàn không phải là một câu hỏi ngớ ngẩn! Kiểm tra này (lần đầu tiên), sau đó này , và này .
Emanuel Berg

Câu trả lời:


7

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 scripthoặc bạn có thể bắt đầu tệp của mình bằng "shebang" #!/bin/bashvà 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ư ./scripthoặ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 athậm chí không thể nhìn thấy tập lệnh bên trong.


1

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 ( shvốn là tiền thân của bash, kshtươ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.


-1

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.


4
Không. Dán nội dung tương đương với tìm nguồn cung cấp kịch bản. Điều này sẽ thay đổi tất cả các loại tùy chọn trong trình bao hiện tại, điều này sẽ không được thay đổi bằng cách chạy tập lệnh.
michas

bạn nói đúng. nhưng theo như câu hỏi của anh ấy Tôi nghĩ rằng chúng ta có thể nói nó khá giống nhau. nhưng có, để dịch những gì michas nói theo thuật ngữ của người mới. dán nội dung của kịch bản là tương đương để làm 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_filesẽ không sửa đổi ENV, trừ khi exportđược sử dụng rõ ràng.
Mathieu J.

1
Không. Ngay cả với exportmộ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. :)
michas

1
@michas: Chà, vẫn tốt hơn là đưa ra mô tả chính xác. Nếu người mới bắt đầu có tham vọng, và có thói quen làm việc, anh ấy hoặc cô ấy sẽ nhanh chóng nhận được. Nếu chúng ta cố gắng kể câu chuyện của đứa trẻ, chúng ta sẽ chỉ vấp ngã và tạo ấn tượng khó hiểu - bên cạnh đó, người mới bắt đầu có thể trở lại, sau đó. Mặc dù tôi không coi mình là người mới bắt đầu, nhưng có rất nhiều điều tôi không biết, và tôi sẽ bị xúc phạm nếu có ai giữ lại bất cứ điều gì trả lời câu hỏi của tôi bởi vì "bạn chưa ở đó, đàn em".
Emanuel Berg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.