Õppige Bashis hankimise ja hargnemise erinevust
Selle artikli põhirõhk on selgelt mõista, mis juhtub, kui käivitate skripti vs skripti allikas bashis. Esiteks saame skripti erineval viisil helistades selgelt aru, kuidas programm esitatakse.
MÄRKUS. Laiendiga skripti loomine pole oluline. Skript töötab hästi ka ilma laienditeta.
Põhimõtteliselt algab iga skript reaga, mida nimetatakse seebangiks (#!). Hashi sümbolit bashis tõlgendatakse kommentaaridena, kuid šebangil on eriline tähendus. See käsib bash'il programmi esitada mis tahes tõlgis, mille te shebangis mainisite.
Allpool on näidisprogramm ja täpsustan tõlkina bashi.
$ cat >> Hello_World.sh #!/usr/bin/env bash echo "Hello world" $ chmod +x Hello_world.sh
Nüüd skripti käivitamiseks saate seda teha kahel viisil.
- Kasutage skripti kutsumiseks suhtelist teed. Liikuge kataloogi, kus skript asub, ja käivitage ./Hello_world.sh.
- Skripti kutsumiseks kasutage absoluutset teed. Tippige failisüsteemi suvalisest kohast skripti täielik tee.
$ ./Hello_world.sh $ pwd $ /home/karthick/Hello_world
Vaatame nüüd, mis juhtub, kui proovite oma programmi esitada ilma shebangita. Shebangi puudumisel esitatakse programm mis tahes praegusele kestale, millega te töötate. Minu puhul on see Bash (/ bin/bash).
Lubage mul näidet näidata. Ma loon ilma püstkoodita pythoni skripti ja kui programmile helistan, ei tea bash, et peaks selle programmi esitama pythoni tõlgile, selle asemel, et ta käivitaks programmi praeguses kestas.
$ cat > run-py.py echo $SHELL print("Hello world") $ chmod +x run-py.py $ ./run-py.py
Sellisel juhul võite programmi helistada, mainides, millisele tõlkile see tuleks edastada, või lisage lihtsalt shebangi rida, mida alati soovitatakse.
# which python3 $(which python3) /home/karthick/run_py.py
Nüüd, kui teate, kuidas skriptile helistada, oleks järgmine samm mõista, mis juhtub, kui me skripti kutsume. Kui käivitate skripti, nagu on näidatud ülaltoodud näidetes, loob see alamprotsessi (hargnemine) ja skript saadetakse alamprotsessi. Käivitasin skripti näidise, mis käivitab lihtsalt järgmise käsu ja näitab, et skript on alamprotsessile edastatud.
$ ps -ef --forest | grep -i bash
Skripti osana võib olla mitu alamprotsessi ja see sõltub meie koodist. Tuleb märkida, et alaindeksiga loodud keskkonnamuutujad loobutakse pärast selle valmimist. Lapseprotsess pääseb juurde vanemprotsessi loodud muutujatele, eksportides need. Kuid vanemprotsess ei pääse juurde lapseprotsessi loodud muutujatele.
Vaadake allolevaid artikleid, et saada lisateavet muutujate tööpõhimõtte ja muutujate eksportimise kohta.
- „Linuxi muutujate” mõistmine ja kirjutamine Shelli skriptides
- Lisateave $$ja $BASHPID erinevuse kohta Bashis
Skripti hankimine
Allikas on sisseehitatud shellikäsk, mis loeb talle argumendina edastatud faili ja käivitab koodi praeguses shellikeskkonnas. Sobiv kasutusjuht, mida enamasti kasutate, on konfiguratsiooni muutmine failis .bashrc
või .bash_profile
ja muudatuste uuesti laadimine käsuga source.
$ type -a source
Lähtekäsu käivitamiseks on kaks süntaktilist viisi. Võite valida igaühe kahest süntaksist ja see on isiklik valik.
$ source FILE_NAME [ARGUMENTS] $ . FILE_NAME [ARGUMENTS]
Lubage mul näidata, kuidas allikas tegelikult töötab. Kavatsen luua kaks shelliskripti. Esimene skript (Module.sh) mahutab mõned muutujad ja funktsioonid. Teine skript (Main.sh) kavatseb muutuja printida ja funktsiooni kutsuda.
Fail Module.sh.
#!/usr/bin/env bash VAR1=$(echo "Welcome to $1") function f1(){ echo “Function f1 is called” }
Fail Main.sh.
#!/usr/bin/env bash echo $VAR1 f1
Määrake skripti täitmisluba ja kutsuge põhiskripti "main.sh". Nüüd püüab see skript leida funktsiooni f1
ja muutuja VAR1
praeguses shellikeskkonnas ning nurjub, kui käsku ei leitud.
$ bash main.sh
Käivitame nüüd skripti sees käsu allikas, mis laadib muutuja ja funktsioonid praegusesse shellikeskkonda ning millele pääseb juurde aadressil „main.sh”.
Fail Module.sh.
#!/usr/bin/env bash VAR1=$(echo "Welcome to $1") function f1(){ echo "Function f1 is called" }
Fail Main.sh.
#!/usr/bin/env bash source module.sh Tecmint echo $VAR1 f1
Nüüd käivitage skript uuesti ja vaadake.
$ bash main.sh
Allikas on bashis väga kasulik, et järgida moodulprogrammeerimise lähenemist meie shelliskriptide loomisel. Saame jagada oma koodi väiksemateks mooduliteks ja seda saab kasutada paljudes programmides. Nii saame järgida põhimõtet DRY (Don’t Repeat Yourself).
See on selle artikli jaoks. Oleme lühidalt arutanud erinevust bashi hankimise ja hargnemise vahel. Tutvuge artikliga ja jagage meiega oma väärtuslikku tagasisidet.