Trong một tập lệnh bash, một dấu chấm theo sau là khoảng trắng và sau đó là một đường dẫn có nghĩa là gì?


83

Tôi đã bắt gặp ví dụ này khi cố gắng gắn thiết bị usb bên trong thùng chứa openvz và tôi chưa bao giờ thấy cấu trúc trong dòng thứ hai trước đây. Bạn có thể giải thích những gì nó có nghĩa?

#!/bin/bash
. /etc/vz/vz.conf

Câu trả lời:


98

Đó là một từ đồng nghĩa của nội dung source. Nó sẽ thực thi các lệnh từ một tệp trong shell hiện tại , như đọc từ help sourcehoặc help ..

Trong trường hợp của bạn, tệp /etc/vz/vz.confsẽ được thực thi (rất có thể, nó chỉ chứa các phép gán biến sẽ được sử dụng sau này trong tập lệnh). Nó khác với việc chỉ thực thi tệp với, ví dụ, /etc/vz/vz.conftheo nhiều cách: rõ ràng nhất là tệp không cần phải được thực thi; sau đó bạn sẽ nghĩ đến việc chạy nó với bash /etc/vz/vz.confnhưng điều này sẽ chỉ thực hiện nó trong một tiến trình con và tập lệnh cha sẽ không thấy bất kỳ sửa đổi nào (ví dụ: các biến) mà đứa trẻ thực hiện.

Thí dụ:

$ # Create a file testfile that contains a variable assignment:
$ echo "a=hello" > testfile
$ # Check that the variable expands to nothing:
$ echo "$a"

$ # Good. Now execute the file testfile with bash
$ bash testfile
$ # Check that the variable a still expands to nothing:
$ echo "$a"

$ # Now _source_ the file testfile:
$ . testfile
$ # Now check the value of the variable a:
$ echo "$a"
hello
$

Hi vọng điêu nay co ich.


14
Chỉ cần một lưu ý: .sẽ hoạt động trong hầu hết các shell (sh, ash, ksh, v.v.), sourcelà đặc trưng cho bash.
Dmytro Sirenko

3
@EarlGray sourcekhông chỉ là bash - nó ở dạng vỏ chữ C ( csh, tcsh) - và zsh cũng vậy. .hoạt động trong các vỏ kiểu Bourne bao gồm cả những cái được liệt kê . Xem xét rằng bash là một kiểu vỏ Bourne và hầu như không có tập lệnh bash nào có độ phức tạp không tầm thường có khả năng chạy trong trình bao kiểu C, điều đó đúng .nên được coi là dễ mang theo hơn nhiều. Nhưng sourceđồng nghĩa của bash .tồn tại một phần cho tính di động.
Eliah Kagan

1
@EliahKagan vâng, bạn đúng; tốt hơn là nói rằng nó .là thiết bị di động phổ biến và sourcecó phạm vi rộng, nhưng không hoạt động đơn giản sh.
Dmytro Sirenko

5

Khi một tập lệnh được chạy bằng cách sử dụng 'nguồn', nó chạy trong trình bao hiện có, mọi biến được tạo hoặc sửa đổi bởi tập lệnh sẽ vẫn có sẵn sau khi tập lệnh hoàn tất.

Cú pháp. tên tệp [đối số]

  source filename [arguments]
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.