Hãy xem: Mục Câu hỏi thường gặp về BASH # 28: "Làm cách nào để xác định vị trí của tập lệnh của tôi? Tôi muốn đọc một số tệp cấu hình từ cùng một nơi."
Bất kỳ giải pháp nào sẽ không hoạt động 100% thời gian:
Điều quan trọng là phải nhận ra rằng trong trường hợp chung, vấn đề này không có giải pháp. Bất kỳ cách tiếp cận nào bạn có thể đã nghe nói đến và bất kỳ cách tiếp cận nào sẽ được trình bày chi tiết bên dưới, đều có sai sót và sẽ chỉ hoạt động trong những trường hợp cụ thể. Trước hết, hãy cố gắng tránh hoàn toàn sự cố bằng cách không phụ thuộc vào vị trí của tập lệnh của bạn!
Nếu bạn cần phải viết một rất cụ thể tái sử dụng, sau đó lấy đường dẫn chính xác như một tham số để kịch bản của bạn sẽ là phương pháp đáng tin cậy nhất .
Giả sử tập lệnh của bạn sẽ chỉ được chạy từ một số shell nhất định và chỉ với một chút linh hoạt cần thiết, bạn có thể có thể giải tỏa một số hoang tưởng này. Vẫn tốt để xem xét các lựa chọn của bạn. Có những mẫu phổ biến mà mọi người sử dụng đặc biệt có vấn đề.
Đặc biệt, Câu hỏi thường gặp khuyên bạn nên tránh $0
biến số thường được sử dụng :
Không có gì được đọc $0
sẽ không bao giờ có khả năng chống đạn, bởi vì $0
bản thân nó không đáng tin cậy.
Thay vào đó, bạn có thể sử dụng $BASH_SOURCE
thay thế. Một cái gì đó như thế này:
source "${BASH_SOURCE%/*}/act.conf.sh"
Cũng có một số lưu ý đối với giải pháp này. Hãy xem trang Câu hỏi thường gặp để xem sự cân bằng giữa các giải pháp khác nhau. Họ dường như đề xuất cd
kết hợp với $BASH_SOURCE
trong các trường hợp mà nó sẽ phù hợp với bạn, vì bạn gặp phải tình trạng lỗi tiện dụng khi nó không thể mở rộng đúng cách.
readlink
. Đã không thể xác định từ khóa để tìm kiếm nên đăng các câu hỏi ở đây ....