Matutunan Kung Paano Maayos na Patakbuhin ang Subshells Paggamit ng Bash Scripts

Paano Pahintulutan ang mga Subshell na Patakbuhin sa Kahanay sa Background

Ang isang shell ay isang pangunahing interface para sa pagpasok ng mga command sa isang sistema ng Linux. Sa pamamagitan nito, maaari kang magpasok ng direktang utos o tukuyin ang isang file (script) na naglalaman ng isang pagkakasunud-sunod ng mga utos upang maisagawa. Ang mga shell ay nakaayos sa isang hierarchy, at ang anumang shell ay maaaring lumikha ng isang bagong shell. Ang bagong shell ay itinuturing na isang proseso ng bata-isang subshell-ng shell ng magulang na lumilikha nito.

Sa pamamagitan ng default, ang subshell ay nakasalalay sa magulang nito sa diwa na kung natatapos ang proseso ng magulang, tinatapos din ang subshell. Anumang output ay naipasa mula sa subshell sa parent shell.

Paano Gumawa ng Subshell

Sa isang script ng Bash shell, lumikha ka ng subshell gamit ang notipikasyon ng panaklong:

#! / bin / bash echo "Bago magsimula subshell" (count = 1 habang [$ count -le 99] gawin echo "$ count" sleep 1 ((count ++)) tapos na) echo "

Sa halimbawa, ang habang loop ay nakapaloob sa panaklong, na nagiging sanhi ito upang maisagawa sa isang subshell ng shell kung saan ang script file ay naisakatuparan.

Pagpapatakbo ng Subshell sa Background

Maliban kung tukuyin mo na ang subshell ay papatayin sa background, hinihintay ng parent shell ang subshell bago magpatuloy sa pahinga ng script. Gayunpaman, kung nais mong patakbuhin ang subshells magkapareho, pinapatakbo mo ang mga ito sa background, na kung saan ay natapos sa mga character na ampersand sumusunod sa expression subshell, tulad ng ipinapakita dito:

#! / bin / bash echo "Bago magsimula subshell" (count = 1 habang [$ count -le 99] gawin echo "$ count" sleep 1 ((count ++)) tapos na) & echo "

Pagpapatakbo ng Maramihang Mga Subshell sa Parallel

Kung lumikha ka ng maramihang mga subshell bilang mga proseso ng background, maaari kang magpatakbo ng mga gawain nang magkapareho. Karaniwan, ang operating system ay gumagamit ng iba't ibang mga processor o core para sa bawat proseso at subprocess, ipagpapalagay na mayroong hindi bababa sa maraming mga processor o mga core na may mga proseso. Kung hindi, ang mga gawain ay itinalaga sa parehong mga processor o core. Sa kasong iyon, patuloy na lumilipat ang processor o core sa pagitan ng mga nakatalagang gawain hanggang makumpleto ang mga gawain. Ang susunod na halimbawa ay may dalawang subprocesses. Ang unang isa ay binibilang mula 1 hanggang 99, at ang pangalawang isa mula 1000 hanggang 1099.

#! / bin / bash echo "Bago simulan subshell" (count = 1 habang [$ count -le 99] gawin echo "$ count" sleep 1 ((count ++) 1099] gawin echo "$ count" sleep 1 ((count ++)) tapos na) & echo "Tapos na"

Gamitin ang pahayag ng paghihintay upang sabihin sa proseso ng magulang upang maghintay para sa mga subprocesses upang matapos bago magpatuloy sa ibang bahagi ng script:

#! / bin / bash echo "Bago simulan subshell" (count = 1 habang [$ count -le 99] gawin echo "$ count" sleep 1 ((count ++) 1099] gawin echo "$ count" sleep 1 ((count ++)) tapos na) & maghintay echo "Tapos na"

Gumagamit para sa Subshells

Ang mga subshell ay kapaki-pakinabang kapag kailangan ng mga utos na isagawa sa isang partikular na kapaligiran o direktoryo. Kung ang bawat command ay naisakatuparan sa isang iba't ibang mga subshell, walang panganib na variable na mga setting ay halo-halong up. Sa pagkumpleto, ang mga setting at ang kasalukuyang direktoryo ay hindi kailangang maibalik, dahil ang kapaligiran ng proseso ng magulang ay hindi naapektuhan ng alinman sa mga subprocesses nito.

Maaaring gamitin ang mga subshell sa mga kahulugan ng pag-andar upang maisagawa ang mga ito nang maraming beses sa iba't ibang mga parameter.