Tôi có một chức năng mà tôi muốn tham khảo và sử dụng trên các tập lệnh khác nhau. Có cách nào để làm điều này không? Tôi không muốn viết lại cùng chức năng cho các tập lệnh khác nhau. Cảm ơn.Chức năng bash có thể được sử dụng trong các tập lệnh khác nhau không?
Trả lời
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.
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.
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 :)
Tại sao bạn sao chép câu trả lời đã được đăng ... 8 năm trước? –
Để hiểu rõ hơn .. Tôi đã đăng một thời gian ngắn hơn trước đó. –
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
True, tôi đã có nó trộn lẫn với những thứ khác. –
Giả sử 'function.sh' có một số mã trong đó. 'Function function.sh' sẽ thực thi mã? – user1527227