Tgħallem kif timxi sewwa fuq l-iskrivani tal-Bash

Kif Tgħallem Subshells biex Timxi Parallel fl-Isfond

Qoxra hija interface bażika għad-dħul ta 'kmandi fuq sistema Linux. Ma 'dan, tista' tidħol kmand direttament jew tispeċifika fajl (kitba) li fih sekwenza ta 'kmandi li għandhom jiġu eżegwiti. Il-qxur huma organizzati f'ġerarkija, u kwalunkwe qoxra tista 'toħloq qoxra ġdida. Il-qoxra l-ġdida hija meqjusa bħala proċess tat-tfal - subshell-tal-qoxra prinċipali li toħloqha.

B'kontumaċja, subshell jiddependi fuq il-ġenitur tiegħu fis-sens li jekk il-proċess prinċipali jispiċċa, is-subshell jintemm ukoll. Kull output jiġi mgħoddi mis-subshell għall-qoxra prinċipali.

Kif Toħloq Subshell

F'kitba tal-qoxra ta 'Bash, inti toħloq subshell billi tuża n-notazzjoni tal-parentesi:

#! / bin / bash echo "Qabel ma tibda s-subshell" (għadd = 1 filwaqt li [$ count -le 99] tagħmel echo "$ count" sleep 1 ((għadd ++)) magħmul) echo "Completed"

Fl-eżempju, il- linja waqt li tkun magħluqa fil-parentesi, li tikkawża li tkun esegwita f'qoxra tal-qoxra li fiha jitwettaq il-fajl tal-iskritt.

Tmexxija ta 'Subshell fl-Isfond

Sakemm ma tispeċifikax li s-subshell għandu jiġi eżegwit fl-isfond, il-qoxra ewlenija tistenna li s-subshell jintemm qabel ma jkompli bil-bqija tal-iskritt. Madankollu, jekk inti tixtieq li tmexxi subshells b'mod parallel, inti tmexxihom fl-isfond, li jitwettaq bil-karattru ampersand wara l-espressjoni subshell, kif muri hawn:

#! / bin / bash echo "Qabel ma tibda subshell" (għadd = 1 filwaqt li [$ count -le 99] do echo "$ count" sleep 1 ((għadd ++)) magħmul) & echo "Completed"

Running Subshells Multipli Paralleli

Jekk toħloq subshells multipli bħala proċessi fl-isfond, tista 'twettaq il-kompiti b'mod parallel. Tipikament, is-sistema operattiva tuża proċessuri jew cores differenti għal kull proċess u sottoproċess, jekk wieħed jassumi li hemm mill-inqas ħafna proċessuri jew cores kif hemm proċessi. Inkella, il-kompiti huma assenjati lill-istess proċessuri jew cores. F'dak il-każ, il-proċessur jew il-qalba kontinwament jaqleb bejn il-kompiti assenjati sakemm jitlestew il-kompiti. L-eżempju li jmiss għandu żewġ subproċessi. L-ewwel waħda tgħodd minn 1 sa 99, u t-tieni wieħed minn 1000 sa 1099.

#! / bin / bash echo "Qabel ma tibda s-subshell" (għadd = 1 filwaqt li [$ count -le 99] tagħmel echo "$ count" sleep 1 ((għadd ++)) magħmul) & (count = 1000 filwaqt li [$ count -le 1099] do echo "$ count" irqad 1 ((għadd ++)) magħmul) & eku "Irfinut"

Uża l-istqarrija ta ' stenna biex tgħid il-proċess ġenitur li tistenna li s-subproċessi jintemmu qabel ma jipproċedu bil-bqija tal-iskritt:

#! / bin / bash echo "Qabel ma tibda s-subshell" (għadd = 1 filwaqt li [$ count -le 99] tagħmel echo "$ count" sleep 1 ((għadd ++)) magħmul) & (count = 1000 filwaqt li [$ count -le 1099] do echo "$ count" sleep 1 ((count ++)) done) & stenna echo "Completed"

Użi għal Subshells

L-ammonti miżżewġin huma utli meta l-kmandi jeħtieġu li jiġu eżegwiti f'ambjent jew direttorju partikolari. Jekk kull kmand jiġi eżegwit f'subsett differenti, m'hemm l-ebda riskju li s-settings varjabbli jitħalltu. Malli jitlestew, is-settings u d-direttorju kurrenti m'għandhomx għalfejn jiġu rrestawrati, minħabba li l-ambjent tal-proċess prinċipali mhuwiex affettwat minn xi wieħed mis-subproċessi tiegħu.

Is-subsinji jistgħu jintużaw fid- definizzjonijiet tal-funzjoni sabiex ikunu jistgħu jiġu eżegwiti diversi drabi b'parametri differenti.