Sự khác biệt giữa nguồn và vùng. Khác là gì?


147

Sự khác biệt giữa việc thực thi một tập lệnh (ví dụ / some / script) với source /some/script. /some/scripttrong Bash là gì?

Câu trả lời:


134

source.đồng nghĩa trong Bash .

Đối với bất kỳ ai muốn xác minh rằng các lệnh chỉ đơn giản là từ đồng nghĩa và không có gì khác, hãy xem mã nguồn , nói phiên bản 4.3 và kiểm tra tệp builtins/source.def. Bạn sẽ đọc rằng cả hai lệnh dựng sẵn source.sử dụng hàm rất giống nhau : source_builtin.


cái này được định nghĩa ở đâu? Ý tôi là một bí danh cho nguồn hoặc đây là một số điều khác?
binW

chính xác điều tương tự

12
@binW: .là lệnh nguồn truyền thống, được kế thừa từ vỏ bourne cổ đại. sourcechỉ là một bash dựng sẵn mà giống hệt như ., có lẽ bởi vì nó dễ đọc hơn (một .mình có thể khó phát hiện với một phông chữ nhỏ). Bạn sẽ thấy help sourcehelp .hiển thị thông tin tương tự.
geirha

3
@binW: Nếu bạn nhìn vào man bashvà sau đó tìm kiếm, sourcebạn sẽ thấy đó source filename [arguments]là từ đồng nghĩa với . filename [arguments].
Matthew Rankin

46

.đồng nghĩa với sourcetrong bash, nhưng không phải trong POSIX sh, vì vậy bạn nên sử dụng .nếu tập lệnh của bạn được chạy bởi / bin / sh. Lưu ý rằng bash yêu cầu chạy như POSIX sh khi được gọi là / bin / sh, nhưng chấp nhận sourcemà không có khiếu nại.

Hành vi này đã cắn tôi, các kịch bản được thử nghiệm với bash là / bin / sh không thành công khi chạy dưới tro chẳng hạn.


16
POSIX không hạn chế vỏ. POSIX chỉ nói; Shell sẽ hỗ trợ ít nhất là tính năng này và tính năng đó. Vì vậy, trình bao POSIX có thể tự do triển khai các tính năng bổ sung miễn là các tính năng được mô tả bởi POSIX được triển khai. Khi shebang nói rằng #!/bin/shbạn không bao giờ nên giả sử shell hỗ trợ bất cứ thứ gì ngoại trừ các tính năng POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/...
geirha

Bạn có thể bị ảnh hưởng bởi thứ tự tìm kiếm tên: unix.stackexchange.com/q/17815/8250
Lekensteyn

3
Câu trả lời này đã giúp tôi, vì sh thường được sử dụng trong cron.
dfrankow
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.