Puncte:0

Funcția Bash definită în .bashrc nu este disponibilă pentru alte scripturi

drapel vn

Execut această comandă frecvent.

load_module virtuoz

Functioneaza bine in terminal.

Așa că l-am pus într-un script bash numit încărcare.sh, care este executabil.

    #!/bin/bash
    ecou "Bună ziua"
    load_module virtuoz

dar când încerc să-l execut folosind ./încărcare.sh, dă această eroare,

./load.sh: linia 3: load_module: comanda nu a fost găsită

Am încercat să-l depanez punând ecou "bună ziua" în fișierul „load.sh”. Se imprimă Buna ziua pe ecran când execut fișierul, așa că scriptul funcționează bine, cred. Nu mă gândesc ce să mai încerc. Mulțumiri

Iată rezumatul.

een212023@hertz:~/iec_lab1$ ls -la load.sh
-rwxr-xr-x 1 een212023 nogroup 46 Aug 19 17:59 load.sh
een212023@hertz:~/iec_lab1$ cat load.sh
#!/bin/bash
ecou "Bună ziua"
load_module virtuoz
een212023@hertz:~/iec_lab1$ load_module virtuos
een212023@hertz:~/iec_lab1$ ./load.sh
Buna ziua
./load.sh: linia 3: load_module: comanda nu a fost găsită
een212023@hertz:~/iec_lab1$



een212023@hertz:~/iec_lab1$ tip -a load_module
load_module este o funcție
load_module ()
{
    dacă deja_încărcat $1; atunci
        întoarce 0;
    fi;
    load_vars_of_module $1;
    declare -a required_here=("${additional_required[@]}");
    declara -a conflicts_here=("${conflicte_suplimentare[@]}");
    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_ldpaths[*]};
    add_manpaths ${additional_manpath[*]};
    add_lmpaths ${additional_lmpath[*]};
    exportvars ${additional_exports[*]};
    newaliases „${additional_aliases[@]}”;
    unset ${!additional*};
    export MODULES=${MODULE}:$1
}
Byte Commander avatar
drapel nf
Ce este `load_module`? Puteți adăuga rezultatul `type -a load_module` la întrebarea dvs., vă rog? Dacă este de ex. un alias, nu va fi disponibil în scripturi.
Rahul avatar
drapel vn
@ByteCommander Am adăugat rezultatul „type -a load_module”
Byte Commander avatar
drapel nf
Aruncă o privire la https://unix.stackexchange.com/q/63665/103151 - dacă definiți o funcție shell, de ex. în fișierul tău .bashrc, acesta nu va fi disponibil pentru scripturi, ci doar pentru shell-ul tău interactiv. În schimb, puteți converti funcția într-un script separat sau o puteți copia în noul dvs. script, de exemplu.
sourav c. avatar
drapel cn
Acesta este motivul pentru care `export` există.
Rahul avatar
drapel vn
@souravc. Am adăugat `export -f load_module` în fișierul meu `load.sh`, dar la executare se spune, `load_module: nu o funcție`
Byte Commander avatar
drapel nf
Trebuie să exportați funcția acolo unde este definită, nu unde doriți să o încărcați. Dar dacă înțeleg corect postarea pe care am legat-o, în funcție de locul în care o definiți, este posibil ca acel fișier să nu fie încărcat pentru scripturi oricum.
Puncte:1
drapel vn

După cum au afirmat alții, trebuie să vă definiți funcțiile atunci când încărcați scriptul.

Fac asta având un fișier script care conține funcțiile mele „comune” pe care le folosesc în scripturi în general. Să numim acest fișier /cale/spre/bash-common.sh - și în cazul dvs., acest script ar conține funcția load_module.

Apoi, ceea ce fac este să fac referire la acest script comun în toate celelalte scripturi, așa că toate scripturile mele încep așa:

#!/bin/bash
sursă /cale/spre/bash-common.sh

În cazul dvs., dvs încărcare.sh ar fi atunci:

#!/bin/bash
sursă /cale/spre/bash-common.sh

ecou "Bună ziua"
load_module virtuoz

Atunci poti si tu sursă /cale/spre/bash-common.sh în dumneavoastră .bashrc dacă dorești.

În acest fel, trebuie să vă mențineți toate funcțiile personalizate într-un singur loc și ele sunt accesibile oriunde ați sursa acest fișier (inclusiv în shell-ul dvs. interactiv dacă îl obțineți în .bashrc).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.