Kọ ẹkọ Iyato Laarin Nkan Nkan ati Ipara ni Bash


Idojukọ akọkọ ti nkan yii ni lati ni oye kedere ohun ti o ṣẹlẹ nigbati o ba n ṣiṣẹ iwe afọwọkọ la orisun iwe afọwọkọ ni bash. Ni akọkọ, a yoo ni oye kedere bi a ṣe fi eto naa silẹ nigbati o ba pe iwe afọwọkọ ni awọn ọna oriṣiriṣi.

AKIYESI: ṣiṣẹda iwe afọwọkọ pẹlu itẹsiwaju ko ṣe pataki. Akosile yoo ṣiṣẹ daradara paapaa laisi awọn amugbooro.

Ni ipilẹṣẹ, gbogbo iwe afọwọkọ bẹrẹ pẹlu laini ti a pe ni shebang (#!). Aami Hash ni bash yoo tumọ bi awọn asọye ṣugbọn shebang ni itumọ pataki. O sọ fun bash lati fi eto naa silẹ ni ohunkohun ti onitumọ ti o mẹnuba ninu shebang.

Ni isalẹ wa ni eto apẹẹrẹ ati pe Mo n ṣalaye bash bi onitumọ mi.

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

$ chmod +x Hello_world.sh

Bayi lati ṣiṣe iwe afọwọkọ naa, o le ṣe ni awọn ọna meji.

  • Lo ọna ibatan lati pe iwe afọwọkọ naa. Gbe si itọsọna nibiti iwe afọwọkọ wa ati ṣiṣe ./Hello_world.sh.
  • Lo ọna to pe lati pe iwe afọwọkọ naa. Lati ibikibi ninu eto faili iru ọna kikun si iwe afọwọkọ naa.

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

Bayi jẹ ki a wo ohun ti o ṣẹlẹ nigbati o ba gbiyanju lati fi eto rẹ silẹ laisi shebang. Laisi shebang, eto naa yoo fi silẹ si ohunkohun ti ikarahun lọwọlọwọ ti o nṣiṣẹ pẹlu, Ni ọran mi, o jẹ Bash (/ bin/bash).

Jẹ ki n ṣe afihan apẹẹrẹ kan. Mo n ṣẹda iwe afọwọkọ python laisi shebang ati pe nigbati mo pe eto naa, bash ko mọ pe o yẹ ki o fi eto yii silẹ si onitumọ python dipo ki o ṣe eto naa ni ikarahun lọwọlọwọ.

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

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

Ni ọran yii, o le pe eto naa nipa mẹnuba ori eyiti ogbufọ ti o yẹ ki o fi silẹ si tabi ṣafikun laini shebang eyiti o ni iṣeduro nigbagbogbo.

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

Bayi pe o mọ bi a ṣe le pe iwe afọwọkọ naa, igbesẹ ti n tẹle yoo jẹ lati ni oye ohun ti o ṣẹlẹ nigbati a pe iwe afọwọkọ naa. Nigbati o ba pe iwe afọwọkọ bi a ṣe han ninu awọn apẹẹrẹ ti o wa loke yoo ṣẹda ilana ọmọde (forking) ati pe a yoo fi iwe afọwọkọ silẹ si ilana ọmọ. Mo ran akosile apẹẹrẹ kan ti yoo kan ṣiṣe aṣẹ atẹle ati fihan pe a ti fi iwe afọwọkọ silẹ si ilana ọmọde.

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

Awọn ilana ọmọde lọpọlọpọ le wa gẹgẹ bi apakan ti iwe afọwọkọ ati pe o da lori koodu wa. O ni lati ṣe akiyesi pe awọn oniyipada ayika ti a ṣẹda nipasẹ ṣiṣe alabapin yoo silẹ ni kete ti o ba pari. Ilana ọmọde le wọle si awọn oniyipada ti a ṣẹda nipasẹ ilana obi nipasẹ gbigbe si okeere wọn. Ṣugbọn ilana obi ko le wọle si awọn oniyipada ti a ṣẹda nipasẹ ilana ọmọ.

Wo awọn nkan ti o wa ni isalẹ lati ni oye diẹ sii nipa bii awọn oniyipada ṣiṣẹ ati bii o ṣe le okeere awọn oniyipada si ilu okeere.

  • Oye ati kikọ ‘Awọn oniyipada Linux’ ninu Ikarahun Ikarahun
  • Kọ ẹkọ iyatọ Laarin $$ati $BASHPID ni Bash

Sourcing the Script

\ "Orisun" jẹ aṣẹ ti a ṣe sinu ikarahun kan ti o ka faili ti o kọja bi ariyanjiyan si rẹ ati ṣiṣe koodu ni agbegbe ikarahun lọwọlọwọ. Ọran lilo ti o yẹ ti o lo julọ n ṣe atunṣe iṣeto rẹ ni .bashrc tabi .bash_profile ati gbigba awọn ayipada pada ni lilo pipaṣẹ orisun.

$ type -a source

Awọn ọna afọwọṣe meji lo wa lati ṣiṣe aṣẹ orisun. O le yan ẹnikẹni lati awọn sintasi meji ati pe o jẹ yiyan ti ara ẹni.

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

Jẹ ki n ṣe afihan bi orisun ṣe n ṣiṣẹ gangan. Emi yoo ṣẹda awọn iwe afọwọkọ ikarahun meji. Iwe afọwọkọ akọkọ (Module.sh) yoo mu diẹ ninu awọn oniyipada ati awọn iṣẹ dani. Iwe afọwọkọ keji (Main.sh) yoo tẹ sita oniyipada naa ki o pe iṣẹ naa.

Faili Module.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

Ṣeto igbanilaaye ipaniyan fun iwe afọwọkọ ki o pe akọwe akọkọ\"main.sh". Bayi, iwe afọwọkọ yii yoo gbiyanju lati wa iṣẹ f1 ati oniyipada VAR1 ninu lọwọlọwọ ayika ikarahun ati pe yoo kuna pẹlu aṣẹ ti a ko rii.

$ bash main.sh

Bayi jẹ ki a ṣiṣẹ aṣẹ orisun inu iwe afọwọkọ eyi ti yoo fifuye oniyipada ati awọn iṣẹ sinu agbegbe ikarahun lọwọlọwọ ati pe yoo jẹ iraye si nipasẹ\"main.sh".

Faili Module.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

Bayi ṣiṣe awọn iwe afọwọkọ lẹẹkansi ki o wo.

$ bash main.sh

Orisun naa wulo pupọ ni bash lati tẹle ọna siseto modulu ni ṣiṣẹda awọn iwe afọwọkọ ikarahun wa. A le fọ koodu wa sinu awọn modulu kekere ati pe a le lo ni ọpọlọpọ awọn eto. Ni awọn ọna wọnyi, a le tẹle ilana gbigbẹ (Maṣe Tun ara Rẹ).

Iyẹn ni fun nkan yii. A ti jiroro ni ṣoki iyatọ laarin wiwa-wara ati ifun ni bu. Lọ nipasẹ nkan naa ki o pin awọn esi iyebiye rẹ pẹlu wa.