Điểm:0

Hàm Bash được xác định trong .bashrc không có sẵn cho các tập lệnh khác

lá cờ vn

Tôi thực hiện lệnh này thường xuyên.

load_module bậc thầy

Nó hoạt động tốt trong thiết bị đầu cuối.

Vì vậy, tôi đặt nó trong một tập lệnh bash có tên tải.sh, có thể thực thi được.

    #!/bin/bash
    lặp lại "Xin chào"
    load_module bậc thầy

nhưng khi tôi cố gắng thực hiện nó bằng cách sử dụng ./load.sh, nó đưa ra lỗi này,

./load.sh: dòng 3: load_module: không tìm thấy lệnh

Tôi đã cố gắng gỡ lỗi bằng cách đặt lặp lại "xin chào" trong tệp 'load.sh'. Nó in xin chào trên màn hình khi tôi thực thi tệp, vì vậy tập lệnh hoạt động tốt, tôi đoán vậy. Tôi không nghĩ về những gì khác để thử. Cảm ơn

Đây là bản tóm tắt.

een212023@hertz:~/iec_lab1$ ls -la load.sh
-rwxr-xr-x 1 een212023 nogroup 46 ngày 19 tháng 8 17:59 load.sh
een212023@hertz:~/iec_lab1$ cat load.sh
#!/bin/bash
lặp lại "Xin chào"
load_module bậc thầy
een212023@hertz:~/iec_lab1$ load_module điêu luyện
een212023@hertz:~/iec_lab1$ ./load.sh
Xin chào
./load.sh: dòng 3: load_module: không tìm thấy lệnh
een212023@hertz:~/iec_lab1$



een212023@hertz:~/iec_lab1$ gõ -a load_module
load_module là một chức năng
tải_mô-đun ()
{
    nếu đã được_tải $1; sau đó
        trả về 0;
    có;
    load_vars_of_module $1;
    khai báo -a required_here=("${additional_required[@]}");
    khai báo -a clash_here=("${additional_conflicts[@]}");
    load_required_modules ${required_here[*]};
    unload_conflicting_modules ${conflicts_here[*]};
    load_vars_of_module $1;
    init_all_paths;
    add_paths ${additional_path[*]};
    add_ldpaths ${additional_ldpath[*]};
    add_manpaths ${additional_manpath[*]};
    add_lmpaths ${additional_lmpath[*]};
    xuất khẩu ${additional_exports[*]};
    bí danh mới "${additional_aliases[@]}";
    bỏ đặt ${!additional*};
    xuất MODULES=${MODULES}:$1
}
Byte Commander avatar
lá cờ nf
`load_module` là gì? Bạn có thể thêm đầu ra của `type -a load_module` vào câu hỏi của mình không? Nếu nó là ví dụ. một bí danh, nó sẽ không có sẵn trong tập lệnh.
Rahul avatar
lá cờ vn
@ByteCommander Tôi đã thêm đầu ra của "type -a load_module"
Byte Commander avatar
lá cờ nf
Hãy xem https://unix.stackexchange.com/q/63665/103151 - nếu bạn xác định hàm shell, ví dụ: trong tệp .bashrc của bạn, tệp này sẽ không có sẵn cho tập lệnh, chỉ có sẵn cho trình bao tương tác của bạn. Thay vào đó, bạn có thể chuyển đổi chức năng thành một tập lệnh riêng hoặc sao chép nó vào tập lệnh mới của mình.
sourav c. avatar
lá cờ cn
Đây là lý do tại sao `xuất khẩu` tồn tại.
Rahul avatar
lá cờ vn
@souravc. Tôi đã thêm `export -f load_module` trong tệp `load.sh` của mình nhưng khi thực thi có thông báo, `load_module: not a function`
Byte Commander avatar
lá cờ nf
Bạn cần xuất hàm ở nơi nó được xác định, không phải nơi bạn muốn tải nó. Nhưng nếu tôi hiểu chính xác bài đăng mà tôi đã liên kết, tùy thuộc vào nơi bạn xác định nó, thì tệp đó có thể không được tải cho các tập lệnh.
Điểm:1
lá cờ vn

Như những người khác đã nêu, bạn cần xác định chức năng của mình khi tải tập lệnh.

Tôi đang làm điều này bằng cách có một tệp tập lệnh chứa các hàm "phổ biến" mà tôi sử dụng trong các tập lệnh nói chung. Hãy gọi tập tin này /path/to/bash-common.sh - và trong trường hợp của bạn, tập lệnh này sẽ chứa chức năng tải_mô-đun.

Sau đó, những gì tôi đang làm là tham chiếu tập lệnh phổ biến này trong tất cả các tập lệnh khác, vì vậy tất cả các tập lệnh của tôi bắt đầu như thế này:

#!/bin/bash
nguồn /path/to/bash-common.sh

Trong trường hợp của bạn, của bạn tải.sh sau đó sẽ là:

#!/bin/bash
nguồn /path/to/bash-common.sh

lặp lại "Xin chào"
load_module bậc thầy

sau đó bạn cũng có thể nguồn /path/to/bash-common.sh trong bạn .bashrc nếu bạn muốn.

Bằng cách này, bạn chỉ phải duy trì tất cả các chức năng tùy chỉnh của mình ở một nơi và chúng có thể truy cập được ở bất kỳ nơi nào bạn lấy nguồn tệp này (kể cả trong trình bao tương tác của bạn nếu bạn lấy nguồn ở .bashrc).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.