Jifunze Tofauti Kati ya Utafutaji na Utafutaji katika Bash


Lengo kuu la kifungu hiki ni kuelewa wazi kile kinachotokea wakati unaendesha hati dhidi ya chanzo cha hati katika bash. Kwanza, tutaelewa wazi jinsi programu inavyowasilishwa unapoita script kwa njia tofauti.

KUMBUKA: kuunda hati na kiendelezi haijalishi. Hati itafanya kazi vizuri hata bila viendelezi.

Kimsingi, kila hati huanza na mstari unaoitwa shebang(#!). Alama ya Hash katika bash itafasiriwa kama maoni lakini shebang ina maana maalum. Inamwambia bash kuwasilisha programu kwa mkalimani wowote uliyotaja kwenye shebang.

Hapo chini kuna sampuli ya programu na ninabainisha bash kama mkalimani wangu.

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

$ chmod +x Hello_world.sh

Sasa ili kuendesha hati, unaweza kuifanya kwa njia mbili.

  • Tumia njia ya jamaa kuita hati. Nenda kwenye saraka ambapo hati iko na uendeshe ./Hello_world.sh.
  • Tumia njia kamili kuita hati. Kutoka mahali popote katika mfumo wa faili andika njia kamili ya hati.

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

Sasa hebu tuone kinachotokea unapojaribu kuwasilisha programu yako bila shebang. Kwa kukosekana kwa shebang, programu itawasilishwa kwa ganda lolote la sasa unaloendesha nalo, Kwa upande wangu, ni Bash (/bin/bash).

Acha nionyeshe mfano. Ninaunda hati ya python bila shebang na ninapoita programu, bash hajui kuwa inapaswa kuwasilisha programu hii kwa mkalimani wa python badala yake itaendesha programu kwenye ganda la sasa.

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

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

Katika kesi hii, unaweza kupiga programu kwa kutaja ni mkalimani gani inapaswa kuwasilishwa au kuongeza tu mstari wa shebang ambao unapendekezwa kila wakati.

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

Sasa kwa kuwa unajua jinsi ya kuita hati, hatua inayofuata itakuwa kuelewa kinachotokea tunapoita hati. Unapoomba hati kama inavyoonyeshwa katika mifano iliyo hapo juu itaunda mchakato wa mtoto (upangaji) na hati itawasilishwa kwa mchakato wa mtoto. Niliendesha sampuli ya hati ambayo itaendesha tu amri ifuatayo na inaonyesha hati imewasilishwa kwa mchakato wa mtoto.

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

Kunaweza kuwa na michakato mingi ya watoto kama sehemu ya hati na hiyo inategemea nambari yetu. Ikumbukwe kwamba anuwai za mazingira iliyoundwa na usajili zitashushwa mara tu itakapokamilika. Mchakato wa mtoto unaweza kufikia vibadala vilivyoundwa na mchakato wa mzazi kwa kuvihamisha. Lakini mchakato wa mzazi hauwezi kufikia vigezo vilivyoundwa na mchakato wa mtoto.

Angalia vifungu vilivyo hapa chini ili kuelewa zaidi kuhusu jinsi viambajengo hufanya kazi na jinsi ya kusafirisha vigeu.

  • Kuelewa na Kuandika ‘Vigezo vya Linux’ katika Uandishi wa Shell
  • Jifunze Tofauti Kati ya $$na $BASHPID katika Bash

Kupata Hati

\Chanzo ni amri iliyojumuishwa kwa ganda ambayo husoma faili iliyopitishwa kama kiingilio kwayo na kuendesha msimbo katika mazingira ya sasa ya ganda. Kesi inayofaa ya utumiaji ambayo unatumia zaidi ni kurekebisha usanidi wako katika .bashrc au .bash_profile na kupakia upya mabadiliko kwa kutumia amri ya chanzo.

$ type -a source

Kuna njia mbili za kisintaksia za kuendesha amri ya chanzo. Unaweza kuchagua mtu yeyote kutoka kwa sintaksia mbili na ni chaguo la kibinafsi.

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

Acha nionyeshe jinsi chanzo kinavyofanya kazi. Nitaunda maandishi mawili ya ganda. Hati ya kwanza (Module.sh) itashikilia vigeuzo na vitendakazi. Hati ya pili (Main.sh) itachapisha kibadilishaji na kuita kitendakazi.

Faili Moduli.sh.

#!/usr/bin/env bash

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

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

Faili Main.sh.

#!/usr/bin/env bash

echo $VAR1
f1

Weka ruhusa ya utekelezaji wa hati na upige simu hati kuu \main.sh. Sasa, hati hii itajaribu kupata chaguo za kukokotoa f1 na kigezo cha VAR1 kwa sasa. mazingira ya ganda na itashindwa na amri haijapatikana.

$ bash main.sh

Sasa hebu tuendeshe amri ya chanzo ndani ya hati ambayo itapakia utofauti na utendakazi katika mazingira ya sasa ya ganda na ambayo yatafikiwa na \main.sh.

Faili Moduli.sh.

#!/usr/bin/env bash

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

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

Faili Main.sh.

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1

Sasa endesha hati tena na uone.

$ bash main.sh

Chanzo ni muhimu sana katika bash kufuata mbinu ya upangaji wa kawaida katika kuunda hati zetu za ganda. Tunaweza kuvunja msimbo wetu katika moduli ndogo na inaweza kutumika katika programu nyingi. Kwa njia hizi, tunaweza kufuata kanuni ya KAVU (Usijirudie).

Hiyo ni kwa makala hii. Tumejadili kwa ufupi tofauti kati ya kutafuta na uma katika bash. Pitia makala na ushiriki maoni yako muhimu na sisi.