2009-06-19 37 views

Trả lời

51

Chắc chắn - trong kịch bản của bạn, nơi bạn muốn sử dụng các chức năng, bạn có thể viết một lệnh như

source function.sh 

tương đương với bao gồm các nội dung của function.sh trong file tại điểm mà lệnh là chạy. Lưu ý rằng function.sh cần phải nằm trong một trong các thư mục trong $PATH; nếu không, bạn cần chỉ định đường dẫn tuyệt đối.

+3

function.sh có thể ở bất kỳ đâu trong PATH của bạn. Nếu bash ở chế độ posix, nó sẽ không nhìn vào thư mục hiện tại. Điều này là tất cả được giải thích trong trang người đàn ông. – camh

+0

True, tôi đã có nó trộn lẫn với những thứ khác. –

+0

Giả sử 'function.sh' có một số mã trong đó. 'Function function.sh' sẽ thực thi mã? – user1527227

9

Có, bạn có thể bản địa hóa tất cả các chức năng của mình trong một tệp chung (hoặc tệp). Đây chính xác là những gì tôi làm với tất cả các chức năng tiện ích của tôi. Tôi có một đơn utility.shinc trong thư mục chính của tôi đó là được sử dụng bởi tất cả các chương trình của tôi với:

. $HOME/utility.shinc 

mà thực thi kịch bản trong bối cảnh của vỏ hiện hành. Điều này là quan trọng - nếu bạn chỉ cần chạy tập lệnh include, nó sẽ chạy trong một subshell và bất kỳ thay đổi nào sẽ không lan truyền đến shell hiện tại.

Bạn có thể làm tương tự cho các nhóm tập lệnh. Nếu nó là một phần của "sản phẩm", tôi có xu hướng đặt tất cả các tập lệnh và mọi tập lệnh được bao gồm trong một thư mục trình bao duy nhất để đảm bảo mọi thứ được bản địa hóa.

-2

Có..bạn có thể! Thêm nguồn function_name vào tập lệnh của bạn. Tôi thích tạo biến eg.VAR = $ (funtion_name), nếu bạn thêm source function_name sau #!/Bin/bash thì kịch bản của bạn trước tiên thực hiện nhiệm vụ hàm đã nhập và sau đó tác vụ kịch bản lệnh hiện tại của bạn sẽ tốt hơn để tạo biến và sử dụng bất cứ nơi nào trong kịch bản. cảm ơn bạn..Hy vọng công việc của nó dành cho bạn :)

+0

Tại sao bạn sao chép câu trả lời đã được đăng ... 8 năm trước? –

+0

Để hiểu rõ hơn .. Tôi đã đăng một thời gian ngắn hơn trước đó. –

Các vấn đề liên quan