Sužinokite, kuo skiriasi „Bash“ tiekimas iš šakų


Pagrindinis šio straipsnio akcentas yra aiškiai suprasti, kas nutinka, kai paleidžiate scenarijų, o scenarijų šaltinis yra bash. Pirma, mes aiškiai suprasime, kaip programa pateikiama, kai skirtingai skambinate scenarijui.

PASTABA: scenarijaus su plėtiniu kūrimas nesvarbu. Scenarijus veiks gerai net ir be plėtinių.

Iš esmės kiekvienas scenarijus prasideda linija, vadinama šebangu (#!). Hash simbolis bash bus interpretuojamas kaip komentarai, bet šebangas turi ypatingą reikšmę. Tai liepia bashui pateikti programą bet kokiu vertėju, kurį minėjote „shebang“.

Žemiau yra pavyzdinė programa ir aš kaip vertėją nurodau bash.

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

$ chmod +x Hello_world.sh

Dabar, norėdami paleisti scenarijų, galite tai padaryti dviem būdais.

  • Norėdami iškviesti scenarijų, naudokite santykinį kelią. Pereikite į katalogą, kuriame yra scenarijus, ir paleiskite ./Hello_world.sh.
  • Norėdami iškviesti scenarijų, naudokite absoliutų kelią. Iš bet kurios failų sistemos vietos įveskite visą scenarijaus kelią.

$ ./Hello_world.sh
$ pwd
$ /home/karthick/Hello_world

Dabar pažiūrėkime, kas atsitiks, kai bandysite pateikti savo programą be šebango. Jei nebus „shebang“, programa bus pateikta bet kuriam dabartiniam apvalkalui, su kuriuo naudojatės. Mano atveju tai yra „Bash“ (/ bin/bash).

Leiskite man parodyti pavyzdį. Aš kuriu python scenarijų be „shebang“ ir, kai aš paskambinu į programą, bash nežino, kad jis turėtų pateikti šią programą python vertėjui, užuot paleidęs programą dabartiniame apvalkale.

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

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

Tokiu atveju galite paskambinti į programą, nurodydami, kuriam vertėjui jis turėtų būti pateiktas, arba tiesiog pridėkite visada rekomenduojamą „shebang“ eilutę.

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

Dabar, kai žinote, kaip paskambinti scenarijui, kitas žingsnis būtų suprasti, kas nutinka, kai vadiname scenarijų. Kai pasinaudosite scenarijumi, kaip parodyta aukščiau pateiktuose pavyzdžiuose, jis sukurs vaiko procesą (šakojimą) ir scenarijus bus pateiktas vaiko procesui. Paleidau scenarijaus pavyzdį, kuris tiesiog vykdys šią komandą ir parodo, kad scenarijus pateiktas vaiko procesui.

$ ps -ef --forest | grep -i bash

Kaip scenarijaus dalis gali būti keli antriniai procesai ir tai priklauso nuo mūsų kodo. Pažymėtina, kad po indeksu sukurti aplinkos kintamieji bus išmesti, kai jis bus baigtas. Vaiko procesas gali pasiekti pirminių proceso sukurtus kintamuosius juos eksportuodamas. Bet tėvų procesas negali pasiekti vaiko proceso sukurtų kintamųjų.

Peržiūrėkite toliau pateiktus straipsnius, kad sužinotumėte daugiau apie kintamųjų veikimą ir kintamųjų eksportavimą.

  • „Linux kintamųjų“ supratimas ir rašymas „Shell Scripting“
  • Sužinokite skirtumą tarp $$ir $BASHPID Bash'e

Tiekimas scenarijaus

„Šaltinis“ yra įmontuota apvalkalo komanda, kuri nuskaito failą, perduotą kaip argumentą, ir paleidžia kodą dabartinėje „shell“ aplinkoje. Tinkamas naudojimo atvejis, kurį dažniausiai naudojate, yra konfigūracijos modifikavimas .bashrc arba .bash_profile ir pakeitimų įkėlimas naudojant komandą „source“.

$ type -a source

Yra du sintaksiniai būdai paleisti šaltinio komandą. Galite pasirinkti bet kurį iš dviejų sintaksių ir tai yra asmeninis pasirinkimas.

$ source FILE_NAME [ARGUMENTS]
$ . FILE_NAME [ARGUMENTS]

Leiskite man parodyti, kaip iš tikrųjų veikia šaltinis. Aš ketinu sukurti du apvalkalo scenarijus. Pirmajame scenarijuje (Module.sh) bus keletas kintamųjų ir funkcijų. Antrasis scenarijus (Main.sh) spausdins kintamąjį ir iškvies funkciją.

Failas „Module.sh“.

#!/usr/bin/env bash

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

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

Failas Main.sh.

#!/usr/bin/env bash

echo $VAR1
f1

Nustatykite scenarijaus vykdymo leidimą ir paskambinkite pagrindiniam scenarijui „main.sh“. Dabar šis scenarijus bandys rasti funkciją f1 ir kintamąjį VAR1 dabartinėje apvalkalo aplinkoje ir nepavyks, jei komanda nerasta.

$ bash main.sh

Dabar vykdykime scenarijaus viduje komandą „source“, kuri įkelia kintamąjį ir funkcijas į dabartinę apvalkalo aplinką ir prieinama prie „main.sh“.

Failas „Module.sh“.

#!/usr/bin/env bash

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

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

Failas Main.sh.

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1

Dabar paleiskite scenarijų dar kartą ir pamatykite.

$ bash main.sh

Šaltinis yra labai naudingas „bash“ modulio programavimo požiūriui kuriant „shell“ scenarijus. Mes galime suskaidyti savo kodą į mažesnius modulius ir jį galima naudoti daugelyje programų. Šiais būdais galime vadovautis DRY (Don’t Repeat Yourself) principu.

Tai šiam straipsniui. Trumpai aptarėme skirtumą tarp apsirūpinimo šaltiniais ir šakų šakų. Peržiūrėkite straipsnį ir pasidalykite vertingais atsiliepimais su mumis.