Cách bao gồm tệp trong tập lệnh bash shell


121

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?

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



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

1
"Câu hỏi cơ bản" là chất xúc tác của tràn ngăn xếp. Bạn hiểu rằng trang web này được lập chỉ mục như bất kỳ trang web nào khác và bây giờ "cách đưa tệp vào tập lệnh bash shell" sẽ hiển thị trên google liên kết để ngăn xếp tràn do đó làm tăng lưu lượng truy cập và hiển thị. = D
Mechaflash

3
Bạn thông minh! Cảm ơn sự tuyệt vời của bạn!
Mechaflash

4
@Troubadour, thật ngớ ngẩn khi nhận xét rằng người dùng nên đã tìm kiếm câu trả lời, khi đó chính xác là cách tôi truy cập trang. Ví dụ: hôm nay câu hỏi cụ thể này là kết quả hàng đầu của Google cho "bash include file". Tôi có nên bỏ qua câu trả lời này để tìm một số giải pháp khác không?
lwitzel

Câu trả lời:


192

Đơn giản chỉ cần đặt bên trong tập lệnh của bạn:

source FILE

Hoặc là

. FILE # POSIX compliant

$ 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.

17
Lưu ý rằng. là tuân thủ POSIX trong khi nguồn không
Mathieu_Du

Nhưng ở đây nguồn không chính xác bao gồm giống như chúng ta làm trong Cngôn ngữ. Ở đây nguồn đang thực thi tập lệnh con thành tập lệnh chính. Nếu tôi chỉ muốn gọi một chức năng cụ thể từ tập lệnh con thì sao?
Paresh Mayani

8
Đừng nhầm lẫn . script.shvới ./script.sh. Tôi đã mất hàng giờ để cố gắng tìm hiểu chuyện gì đang xảy ra
Tihomir Mitkov

Trong khi . là tuân thủ POSIX, có nghĩa là nó sẽ hoạt động trên các vỏ sh, dash, zsh và các vỏ POSIX khác. Nó tốt hơn để sử dụng. vì một số shell có phiên bản "nguồn" tương tự, nhưng hơi khác một chút có thể phá vỡ ứng dụng của bạn.
Jacob Korba

51

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

Ví dụ, a.shb.shtrong cùng một thư mục, bao gồm b kèm . ./b.shtheo.

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

tôi sử dụng

. $(dirname "$0")/b.sh

33

Có, sử dụng nguồn hoặc dạng ngắn chỉ là .:

. other_script.sh

3
Lưu ý .phiên bản hoạt động shtốt như Bash. "Nguồn" chỉ hoạt động ở Bash.
Sridhar Sarnobat

2

Trong tình huống của tôi, để bao gồm color.shtừ cùng một thư mục init.sh, tôi đã phải làm một cái gì đó như sau.

. ./color.sh

Không chắc chắn tại sao ./và không color.shtrực tiếp. Nội dung của color.shnhư sau.

RED=`tput setaf 1`
GREEN=`tput setaf 2`
BLUE=`tput setaf 4`
BOLD=`tput bold`
RESET=`tput sgr0`

Sử dụng File color.shkhông có lỗi, nhưng màu sắc không hiển thị. Tôi đã thử nghiệm điều này trong Ubuntu 18.04Bashphiên bản là:

GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)


Điều đó sẽ chỉ cung cấp cho bạn tệp trong thư mục làm việc hiện tại của bạn chứ không phải thư mục đó init.sh(chúng trùng khớp nếu bạn khởi chạy nó ./init.shở vị trí đầu tiên).
ricab
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.