Tgħallem id-Differenza Bejn Akkwist u Forking f'Bash


Il-fokus ewlieni ta 'dan l-artikolu huwa li tifhem b'mod ċar x'jiġri meta tmexxi l-iskrittura vs sors l-iskrittura f'bash. L-ewwel, aħna se nifhmu b'mod ċar kif il-programm jiġi sottomess meta ssejjaħ l-iskrittura b'modi differenti.

NOTA: il-ħolqien tal-iskript b'estensjoni ma jimpurtax. L-iskript se jaħdem tajjeb anke mingħajr estensjonijiet.

Bażikament, kull skript jibda b'linja msejħa shebang (#!). Is-simbolu Hash f'bash se jiġi interpretat bħala kummenti iżda shebang għandu tifsira speċjali. Jgħid lil bash biex jissottometti l-programm fi kwalunkwe interpretu li semmejt f'shebang.

Hawn taħt hawn kampjun ta' programm u qed nispeċifika bash bħala l-interpretu tiegħi.

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

$ chmod +x Hello_world.sh

Issa biex tmexxi l-iskrittura, tista 'tagħmel dan b'żewġ modi.

  • Uża mogħdija relattiva biex issejjaħ l-iskript. Imxi fid-direttorju fejn ikun preżenti l-iskript u mexxi ./Hello_world.sh.
  • Uża l-mogħdija assoluta biex issejjaħ l-iskript. Minn kullimkien fis-sistema tal-fajl ittajpja l-mogħdija sħiħa għall-iskript.

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

Issa ejja naraw x'jiġri meta tipprova tissottometti l-programm tiegħek mingħajr shebang. Fin-nuqqas ta' shebang, il-programm se jiġi sottomess lil kwalunkwe qoxra attwali li tkun qed taħdem biha, Fil-każ tiegħi, huwa Bash (/bin/bash).

Ħallini nuri eżempju. Qed noħloq script python mingħajr shebang u meta nsejjaħ il-programm, bash ma jafx li għandu jissottometti dan il-programm lill-interpretu python minflok se jmexxi l-programm fil-qoxra attwali.

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

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

F'dan il-każ, tista' ċċempel lill-programm billi ssemmi lil liema interpretu għandu jiġi sottomess jew sempliċement iżżid il-linja shebang li hija dejjem rakkomandata.

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

Issa li taf kif issejjaħ l-iskrittura, il-pass li jmiss ikun li tifhem x'jiġri meta nsejħu l-iskrittura. Meta tinvoka l-iskrittura kif muri fl-eżempji ta 'hawn fuq se toħloq proċess tifel (forking) u l-iskrittura tiġi sottomessa lill-proċess tifel. I dam skript kampjun li se jmexxi biss il-kmand li ġej u juri li l-iskript huwa sottomess għal proċess tifel.

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

Jista 'jkun hemm proċessi tfal multipli bħala parti mill-iskript u dan jiddependi fuq il-kodiċi tagħna. Ta' min jinnota li l-varjabbli ambjentali maħluqa mis-sottoskritt se jitneħħew ladarba jkun lest. Proċess tifel jista' jaċċessa varjabbli maħluqa mill-proċess ġenitur billi jesportahom. Iżda l-proċess ġenitur ma jistax jaċċessa l-varjabbli maħluqa mill-proċess tat-tfal.

Agħti ħarsa lejn l-artikoli hawn taħt biex tifhem aktar dwar kif jaħdmu l-varjabbli u kif tesporta l-varjabbli.

  • Fehim u Kitba ta’ ‘Linux Varjabbli’ fi Shell Scripting
  • Tgħallem id-Differenza Bejn $$u $BASHPID f'Bash

Akkwist tal-Iskrittura

\Sors huwa kmand inkorporat tal-qoxra li jaqra l-fajl li għadda bħala argument lilu u jmexxi l-kodiċi fl-ambjent tal-qoxra attwali. Każ ta' użu xieraq li tuża l-aktar huwa li timmodifika l-konfigurazzjoni tiegħek f'.bashrc jew .bash_profile u tagħbija mill-ġdid il-bidliet bl-użu tal-kmand tas-sors.

$ type -a source

Hemm żewġ modi sintattiċi biex tmexxi l-kmand tas-sors. Tista' tagħżel lil kulħadd minn żewġ sintassi u hija ta' għażla personali.

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

Ħallini nuri kif is-sors fil-fatt jaħdem. Jien ser noħloq żewġ skripts tal-qoxra. L-ewwel skript (Module.sh) se jkollu xi varjabbli u funzjonijiet. It-tieni skript (Main.sh) se jistampa l-varjabbli u jsejjaħ il-funzjoni.

File Module.sh.

#!/usr/bin/env bash

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

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

File Main.sh.

#!/usr/bin/env bash

echo $VAR1
f1

Issettja l-permess ta' eżekuzzjoni għall-iskript u sejjaħ l-iskrittura prinċipali \main.sh. Issa, dan l-iskritt se jipprova jsib il-funzjoni f1 u l-varjabbli VAR1 fil-kurrent ambjent tal-qoxra u se tfalli bil-kmand mhux misjub.

$ bash main.sh

Issa ejja nħaddmu l-kmand tas-sors ġewwa l-iskript li se jgħabbi l-varjabbli u l-funzjonijiet fl-ambjent tal-qoxra attwali u li se jkun aċċessibbli minn \main.sh.

File Module.sh.

#!/usr/bin/env bash

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

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

File Main.sh.

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1

Issa erġa ħaddem l-iskritt u ara.

$ bash main.sh

Is-sors huwa utli ħafna f'bash biex issegwi l-approċċ ta 'programmar modulari fil-ħolqien ta' skripts tal-qoxra tagħna. Nistgħu nkissru l-kodiċi tagħna f'moduli iżgħar u jistgħu jintużaw f'ħafna programmi. B'dawn il-modi, nistgħu nsegwu l-prinċipju DRY (M'għandekx Irrepeti lilek innifsek).

Dak hu għal dan l-artikolu. Iddiskutejna fil-qosor id-differenza bejn is-sors u l-forking f'bash. Għaddi l-artiklu u aqsam il-feedback siewi tiegħek magħna.