2012-05-30 39 views
65

Có cách nào để bao gồm một tập lệnh shell khác trong tập lệnh shell để có thể truy cập các chức năng của nó không?Cách bao gồm tệp trong tập lệnh bash shell

Giống như cách sử dụng PHP, bạn có thể sử dụng chỉ thị include với các tệp PHP khác để chạy các hàm được chứa trong một cách đơn giản bằng cách gọi tên hàm.

+0

thể trùng lặp của [Bash: Làm thế nào _best_ để bao gồm các kịch bản khác] (http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -scripts) – Troubadour

+0

@Troubadour cảm ơn bạn đã tham khảo. Mặc dù bài viết đề cập đến lệnh 'source', câu hỏi trong chính nó là hỏi cách xác định vị trí của tệp' source'. – Mechaflash

+0

Có, nhưng đó là quá đủ cho nhu cầu của bạn. Bạn đã tìm kiếm "bash" và "include" (hai từ có trong tiêu đề câu hỏi của riêng bạn) thì bạn sẽ thấy điều này ở gần đầu kết quả và không cần phải hỏi một câu hỏi cơ bản như vậy. – Troubadour

Trả lời

128

Đơn giản chỉ cần đặt bên trong kịch bản của bạn:

source FILE 

Hoặc

. FILE 

đó là điều tương tự.

$ LANG=C help source 
source: source filename [arguments] 
Execute commands from a file in the current shell. 

Read and execute commands from FILENAME in the current shell. The 
entries in $PATH are used to find the directory containing FILENAME. 
If any ARGUMENTS are supplied, they become the positional parameters 
when FILENAME is executed. 

Exit Status: 
Returns the status of the last command executed in FILENAME; fails if 
FILENAME cannot be read. 
+12

Lưu ý rằng. là POSIX tuân thủ trong khi nguồn không phải là –

+0

Nhưng ở đây nguồn không chính xác bao gồm giống như chúng ta làm trong ngôn ngữ 'C'. Ở đây nguồn là thực thi kịch bản con vào kịch bản chính. Nếu tôi chỉ muốn gọi một chức năng cụ thể từ kịch bản con? –

+6

Đừng nhầm lẫn '. script.sh' với './script.sh'.Tôi mất giờ để cố gắng tìm ra những gì đang xảy ra –

25

Có, sử dụng source hoặc các hình thức ngắn mà chỉ . là:

. other_script.sh 
+0

Lưu ý rằng phiên bản '.' hoạt động trên' sh' cũng như Bash. "Nguồn" chỉ hoạt động trong Bash. –

11

Trên câu trả lời là đúng, nhưng nếu chạy script trong thư mục khác, sẽ có một số vấn đề.

Ví dụ: a.shb.sh nằm trong cùng một thư mục, một bao gồm b với . ./b.sh để bao gồm.

Khi chạy tập lệnh ra khỏi thư mục, ví dụ: xx/xx/xx/a.sh, tệp b.sh sẽ không được tìm thấy: ./b.sh: No such file or directory.

tôi sử dụng

. $(dirname "$0")/b.sh 
Các vấn đề liên quan