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.