chạy script với. Mùi và với nguồn


25
  1. Tôi đã tự hỏi nếu hai cách sau đây để chạy một tập lệnh bash là tương đương?

    . ./myScript.sh
    
    source myScript.sh
  2. Có phải cả hai đều chạy nội dung của tập lệnh thay vì chạy tập lệnh, tức là không tạo một tập hợp con để chạy tập lệnh?

1
Hey, đó là trong trang web!
alex

@alex: cho tôi xem nhé? man ., man sourceHoặc bất cứ điều gì tôi đã không biết được nêu ra.
Tim

2
Xem type .help .
rozcietrzewiacz

man $SHELL,/source
alex

4
. là di động hơn theo những người khác.
l0b0

Câu trả lời:


21
  1. Họ tương đương với bash ở chỗ họ làm chính xác điều tương tự. Mặt khác, sourcedài hơn 5 ký tự và không thể di chuyển sang hệ vỏ chỉ POSIX hoặc Bourne trong khi .(dấu chấm) là vậy, vì vậy tôi không bao giờ bận tâm sử dụng source.

  2. Điều đó là chính xác - tìm nguồn cung cấp một tệp chạy các lệnh trong shell hiện tại và nó sẽ ảnh hưởng đến môi trường shell hiện tại của bạn. Bạn vẫn có thể truyền các đối số cho tệp có nguồn gốc và bash sẽ thực sự tìm kiếm $PATHtên tệp giống như một lệnh thông thường nếu nó không chứa bất kỳ dấu gạch chéo nào.


Không liên quan đến câu hỏi ban đầu của .vs source, nhưng trong ví dụ của bạn,

. ./myScript.sh 

không giống với

source myScript.sh

bởi vì trong khi .sourcegiống nhau về chức năng, myScript.sh./myScript.shkhông giống nhau. Vì ./myScript.shchứa một dấu gạch chéo, nó được hiểu là một đường dẫn và shell chỉ sử dụng ./myScript.sh. Tuy nhiên, myScript.shkhông có dấu gạch chéo nên shell thực hiện $PATHtìm kiếm trước. Đây là hành vi tiêu chuẩn được chỉ định POSIX cho .. Hầu hết các shell mặc định này mặc dù chúng có thể thêm các tiện ích mở rộng (chẳng hạn như tìm kiếm trong thư mục làm việc hiện tại sau khi tìm kiếm đường dẫn) hoặc các tùy chọn để thay đổi hành vi của ./ source.


2
hành vi khi đường dẫn được cung cấp của tệp không chứa a /phụ thuộc vào vỏ và cho bashzshphụ thuộc vào chế độ POSIX có được bật hay không. Cũng lưu ý rằng trong nhiều triển khai ksh, .hành vi khác với source.
Stéphane Chazelas

@StephaneChazelas Vâng, bạn đã đúng. Tôi đã thêm một ghi chú để làm rõ rằng mô tả ở trên là của tiêu chuẩn POSIX.
jw013

8

Vâng, chúng là tương đương. Không có sự khác biệt về chức năng; .chỉ là một từ đồng nghĩa dựng sẵn cho source.

(Chỉnh sửa: Rõ ràng đây chỉ là đúng đối với bashzshMột số vỏ nhẹ hơn không có. source, Chỉ .được xác định bởi POSIX để ksh, dash, ashvv có thể không có sourceSee. Câu trả lời jw013 của để biết.)


Cảm ơn! Nhưng $ alias .đầu ra bash: alias: .: not found .
Tim

Đó là cả hai đều là nội dung và bí danh cũng được xây dựng. Đây là tài liệu , nhưng tôi đoán 'từ đồng nghĩa' là thuật ngữ đúng trong trường hợp này, không phải là 'bí danh'.
Caleb
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.