Aprann Kòman pou byen kouri Subshells Sèvi ak Bash Scripts

Ki jan yo Enstriksyon Subshells kouri nan Paralèl nan Istorik la

Yon koki se yon koòdone debaz pou antre nan kòmandman sou yon sistèm Linux. Avèk li, ou ka antre nan yon lòd dirèkteman oswa presize yon dosye (script) ki gen yon sekans nan lòd yo dwe egzekite. Kokiy yo òganize nan yon yerachi, e nenpòt koki ka kreye yon nouvo koki. Nouvo koki a konsidere kòm yon pwosesis timoun - yon subshell - nan koki paran an ki kreye li.

Pa default, yon subshell depann sou paran li nan sans ke si pwosesis la paran mete fen, subshell la tou fen. Nenpòt pwodiksyon pase nan subshell nan koki paran an.

Ki jan yo kreye yon subshell

Nan yon script koki Bash, ou kreye yon subshell lè l sèvi avèk notasyon parantèz la:

#! / bin / bash eko "Anvan kòmanse subshell" (konte = 1 pandan [$ konte -le 99] fè eko "$ konte" dòmi 1 ((konte ++)) fè) eko "Fini"

Nan egzanp lan, riban an pandan y ap fèmen nan parantèz, ki lakòz li dwe egzekite nan yon subshell nan koki a nan ki dosye a script egzekite.

Kouri yon subshell nan Istorik la

Sòf si ou presize ke subshell la se yo dwe egzekite nan background nan, koki paran an tann pou subshell a fini anvan kontinye ak rès nan script la. Sepandan, si ou vle kouri subshells nan paralèl, ou kouri yo nan background nan, ki se akonpli ak pèsonaj la ampersand apre ekspresyon an subshell, jan yo montre isit la:

#! / bin / bash eko "Anvan kòmanse subshell" (konte = 1 pandan y ap [$ konte -le 99] fè eko "$ konte" dòmi 1 ((konte ++)) fè) & eko "fini"

Kouri subshells miltip nan paralèl

Si ou kreye subshells miltip kòm pwosesis background, ou ka kouri travay nan paralèl. Tipikman, sistèm nan fonksyone itilize processeurs diferan oswa am pou chak pwosesis ak subprocess, an konsideran gen omwen ke anpil processeurs oswa am kòm gen pwosesis. Sinon, travay yo asiyen nan processeurs yo menm oswa am. Nan ka sa a, processeur a oswa nwayo kontinyèlman chanje ant travay yo asiyen jiskaske travay yo fini. Egzanp nan pwochen gen de subprocesses. Premye a yon sèl konte soti nan 1 a 99, ak yon sèl nan dezyèm soti nan 1000 a 1099.

#! / bin / bach eko "Anvan kòmanse subshell" (konte = 1 pandan [$ konte -le 99] fè eko "$ konte" dòmi 1 ((konte ++)) fè) & (konte = 1000 pandan y ap [$ konte -le 1099] fè eko "$ konte" dòmi 1 ((konte ++)) fè) & eko "fini"

Sèvi ak deklarasyon an rete tann pou di pwosesis paran an pou tann pou subprocesses yo fini anvan pwosedi ak rès la nan script la:

#! / bin / bach eko "Anvan kòmanse subshell" (konte = 1 pandan [$ konte -le 99] fè eko "$ konte" dòmi 1 ((konte ++)) fè) & (konte = 1000 pandan y ap [$ konte -le 1099] fè eko "$ konte" dòmi 1 ((konte ++)) fè) & rete tann eko "Fini"

Itilize pou subshells

Subshells yo itil lè kòmandman yo dwe egzekite nan yon anviwònman an patikilye oswa anyè. Si chak lòd egzekite nan yon subshell diferan, pa gen okenn risk ke anviwònman varyab yo pral melanje yo. Sou fini, anviwònman yo ak anyè aktyèl la pa bezwen retabli, kòm anviwònman an nan pwosesis paran an pa afekte pa nenpòt nan subprocesses li yo.

Subshells ka itilize nan definisyon fonksyon pou yo ka egzekite plizyè fwa avèk diferan paramèt.