Dường như việc gọi shell đơn giản trong hệ thống của bạn không kế thừa bí danh (hoặc hàm) được xác định module
, do đó shell không thể tìm thấy nó (xem bên dưới ghi chú với đoạn trích). Hãy thử type module
từ dấu nhắc để xem cách module
xác định hiện tại.
Về cơ bản với nguồn giống như nếu bạn viết từng dòng của kịch bản từ bàn phím.
Lưu ý rằng một mặt bạn đang kế thừa tất cả lịch sử cụ thể của trình bao hiện tại, nhưng ở một bên khác, trình bao hiện tại sẽ phải chịu mọi tác động của tập lệnh và module
lời gọi của bạn .
Về sự khác biệt giữa để tạo tập lệnh và để thực thi tập lệnh, bạn có thể đọc trên SuperUser tháng 9 năm 2009 hoặc tháng 12 năm 2009 , Ubuntu tháng 2 năm 2011 , Unix tháng 8 năm 2011 , Stackoverflow tháng 12 năm 2012 hoặc ở nhiều nơi khác.
Về vấn đề này trong Modulefiles phần có một cảnh báo :
... Các biến môi trường không được đặt khi dỡ tải một modulefile. Vì vậy, có thể tải một modulefile và sau đó dỡ bỏ nó mà không để các biến môi trường trở về trạng thái trước đó.
Vì vậy, có vẻ khôn ngoan hơn khi thực hiện nó trong một kịch bản .
Để hoàn thành cái sau tôi có thể nghĩ:
Để sử dụng trình bao tương tác , bỏ qua lịch sử cụ thể của trình bao hiện tại, sửa đổi shebang của tập lệnh của bạn với
#!/bin/bash -i
Một vỏ tương tác đọc các lệnh từ đầu vào của người dùng trên một tty. Trong số những thứ khác, shell như vậy đọc các tệp khởi động khi kích hoạt, hiển thị lời nhắc và cho phép kiểm soát công việc theo mặc định ...
Nếu thay vào đó bạn thích để kế thừa những câu chuyện cụ thể của vỏ hiện tại, bạn có thể thử để nguồn nó ... nhưng trong một subshell
( source runit.sh )
Hãy cố gắng tìm ra bí danh hiện tại / chức năng module
với type module
sau đó sửa đổi trong kết quả kịch bản của bạn. Lưu ý một số biến môi trường không thể được đặt cho module
.
Nếu bạn muốn bạn có thể tìm thấy các kịch bản khởi tạo trong thư mục $MODULESHOME/init/<shell>
.
Nhận xét
Như đã nhớ trong hỏi đáp của các mô-đun
Một tiến trình con (script) không thể thay đổi môi trường tiến trình cha. Tải mô-đun trong tập lệnh chỉ ảnh hưởng đến môi trường của chính tập lệnh. Cách duy nhất để bạn có thể có một tập lệnh thay đổi môi trường hiện tại là lấy tập lệnh đọc tập lệnh đó vào quy trình hiện tại.
Vì vậy, nếu bạn muốn tránh sửa đổi môi trường hiện tại, tôi nghĩ tốt hơn hết là cố gắng thay đổi shebang (1) hoặc lấy tập lệnh trong một khung con (2). Tôi không hoàn toàn chắc chắn về khả năng sử dụng của vụ án (3).
Lưu ý
Trích từ trang hướng dẫn và mô tả của mô-đun
module
là một giao diện người dùng cho gói Modules. Các module
bí danh hoặc chức năng thực thi cácmodulecmd
chương trình và có vỏ đánh giá đầu ra của lệnh. Đối số đầu tiên để modulecmd
chỉ định loại vỏ.
Gói Modules và module
lệnh được khởi tạo khi tập lệnh khởi tạo dành riêng cho shell được lấy nguồn từ shell . Kịch bản lệnh tạo mô-đun, dưới dạng bí danh hoặc hàm shell, tạo các biến môi trường Mô-đun