Naučite razliku između izvora i račvanja u Bashu


Glavni fokus ovog članka je jasno razumjeti što se događa kada pokrenete skriptu u odnosu na izvor skriptu u bashu. Prvo ćemo jasno razumjeti kako se program podnosi kada skriptu pozivate na različite načine.

NAPOMENA: stvaranje skripte s proširenjem nije važno. Skripta će dobro raditi čak i bez proširenja.

U osnovi, svaka skripta počinje linijom koja se zove shebang(#!). Simbol Hash u bashu protumačit će se kao komentari, ali shebang ima posebno značenje. Kaže bashu da pošalje program u bilo kojem tumaču koji ste spomenuli u shebang.

Dolje je primjer programa, a ja navodim bash kao svog tumača.

cat >> Hello_World.sh
#!/usr/bin/env bash
echo "Hello world"

chmod +x Hello_world.sh

Sada da pokrenete skriptu, možete to učiniti na dva načina.

  • Koristite relativni put za pozivanje skripte. Premjestite se u direktorij u kojem se nalazi skripta i pokrenite ./Hello_world.sh.
  • Koristite apsolutni put za pozivanje skripte. S bilo kojeg mjesta u datotečnom sustavu upišite puni put do skripte.
./Hello_world.sh
pwd
/home/karthick/Hello_world

Sada da vidimo što se događa kada pokušate poslati svoj program bez shebanga. U nedostatku shebang, program će biti poslan na bilo koju trenutnu ljusku koju izvodite, u mom slučaju, to je Bash (/bin/bash).

Dopustite mi da vam pokažem primjer. Stvaram python skriptu bez shebanga i kada pozovem program, bash ne zna da bi trebao poslati ovaj program python interpreteru umjesto toga pokrenut će program u trenutnoj ljusci.

cat > run-py.py
echo $SHELL
print("Hello world")

chmod +x run-py.py
./run-py.py

U tom slučaju možete pozvati program navodeći na kojem prevoditelju ga treba predati ili samo dodati redak shebang koji se uvijek preporučuje.

which python3
$(which python3) /home/karthick/run_py.py

Sada kada znate kako pozvati skriptu, sljedeći korak bio bi razumjeti što se događa kada pozovemo skriptu. Kada pozovete skriptu kao što je prikazano u gornjim primjerima, ona će stvoriti podređeni proces (račvanje) i skripta će biti predana podređenom procesu. Pokrenuo sam primjer skripte koji će samo pokrenuti sljedeću naredbu i pokazati da je skripta poslana podređenom procesu.

ps -ef --forest | grep -i bash

Može postojati više podređenih procesa kao dio skripte i to ovisi o našem kodu. Valja napomenuti da će varijable okoline koje je stvorio indeks biti odbačene nakon što bude gotov. Podređeni proces može pristupiti varijablama koje je kreirao nadređeni proces njihovim izvozom. Ali nadređeni proces ne može pristupiti varijablama koje je kreirao podređeni proces.

Pogledajte članke u nastavku da biste saznali više o tome kako varijable rade i kako izvesti varijable.

  • Razumijevanje i pisanje 'Linux varijabli' u Shell skriptiranju
  • Naučite razliku između $$i $BASHPID u Bashu

Izvor skripte

Izvor ” je naredba ugrađena u ljusku koja čita datoteku proslijeđenu kao argument i pokreće kôd u trenutnom okruženju ljuske. Odgovarajući slučaj upotrebe koji uglavnom koristite je mijenjanje vaše konfiguracije u .bashrc ili .bash_profile i ponovno učitavanje promjena pomoću naredbe source.

type -a source

Postoje dva sintaktička načina za pokretanje izvorne naredbe. Možete odabrati bilo koju od dvije sintakse i to je osobni izbor.

source FILE_NAME [ARGUMENTS]
. FILE_NAME [ARGUMENTS]

Dopustite mi da vam pokažem kako izvor zapravo radi. Napravit ću dvije skripte ljuske. Prva skripta (Module.sh) će sadržavati neke varijable i funkcije. Druga skripta (Main.sh) ispisat će varijablu i pozvati funkciju.

Datoteka Module.sh.

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo “Function f1 is called”
}

Datoteka Main.sh.

#!/usr/bin/env bash

echo $VAR1
f1

Postavite dopuštenje za izvršavanje skripte i pozovite glavnu skriptu “main.sh ”. Sada će ova skripta pokušati pronaći funkciju f1 i varijablu VAR1 u trenutnom okruženju ljuske i neće uspjeti s naredbom nije pronađeno.

bash main.sh

Sada pokrenimo izvornu naredbu unutar skripte koja će učitati varijablu i funkcije u trenutno okruženje ljuske i to će biti dostupno putem “main.sh”.

Datoteka Module.sh.

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo "Function f1 is called"
}

Datoteka Main.sh.

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1

Sada ponovo pokrenite skriptu i pogledajte.

bash main.sh

Izvor je vrlo koristan u bash za praćenje pristupa modularnog programiranja u stvaranju naših skripti ljuske. Naš kod možemo razbiti na manje module i možemo ga koristiti u mnogim programima. Na ove načine možemo slijediti načelo SUHO (Nemojte se ponavljati).

To je to za ovaj članak. Ukratko smo raspravljali o razlici između izvora i račvanja u bashu. Pregledajte članak i podijelite svoje vrijedne povratne informacije s nama.