Bash skriptlarini qanday ishlatishni bilib oling

Orqa fonda parallel ravishda ishlash uchun pastki qismlarga qanday yo'l-yo'riq berish kerak

Qobiq Linux tizimidagi buyruqlar kiritish uchun asosiy interfeysdir. Shu bilan to'g'ridan-to'g'ri buyruqni kiritishingiz yoki amalga oshiriladigan buyruqlar ketma-ketligini o'z ichiga olgan faylni (skript) belgilashingiz mumkin. Shells ierarxiyada tashkil etilgan va har qanday qobiq yangi qobiq hosil qilishi mumkin. Yangi qobiq bola jarayonini, ya'ni uni yaratadigan ota-onalarning qobig'i hisoblanadi.

Odatiy bo'lib, pastki qavatlar ota-onasiga, agar ota-ona jarayoni tugatilsa, subshell ham tugaydi degan ma'noga ega. Har qanday chiqish pastki qavatdan ota-onaga topshiriladi.

Qanday qilib bir subshell yaratish

Agar Bash kabuksiyasi skriptida, parentez yozuvi yordamida pastki qavatni yaratasiz:

($ count -le 99) echo "$ count" uyqu 1 ((count ++)) bajarildi) echo "tugatildi"

Misolda, while loop , parentez ichida joylashganki, bu uni skript fayli bajarilgan qobiqning pastki qavatida bajarilishiga olib keladi.

Orqa fonda pastki qavatni ishga tushirish

Pastki qismni fonda bajarilishini aniqlamasangiz, ota-ona qobig'i ssenariyning qolgan qismini davom ettirishdan oldin tugallanishni kutadi. Shu bilan birga, siz parallel ravishda pastki chiziqlarni ishlatmoqchi bo'lsangiz, ularni fon rejimida ishga tushirasiz, bu erda ko'rsatilganidek, pastki qavatni ifodasini keyin ampersand belgisi bilan bajariladi:

($ count -le 99) echo "$ count" uyqu 1 ((count ++)) bajarildi) va echo "tugatilgan"

Parallel ravishda bir nechta subshelllarni ishga tushirish

Agar bir nechta chiziqli fayllarni fon jarayonlari sifatida yaratadigan bo'lsangiz, vazifalarni parallel ravishda ishga tushirishingiz mumkin. Odatda, operatsion tizim har bir jarayon uchun turli xil protsessorlar yoki yadrolardan foydalanadi va ularda jarayonlar bo'lgani kabi kamida qancha protsessor yoki yadro mavjud bo'lsa, u holda subprocess. Aks holda, vazifalar bir xil CPU yoki yadrolarga beriladi. Bunday holatda, protsessor yoki yadro topshiriq tugatmaguncha topshirilgan vazifalar orasida doimiy ravishda o'zgaradi. Keyingi misolda ikki subprocess mavjud. Birinchisi 1 dan 99 gacha, ikkinchisi esa 1000 dan 1099 gacha.

($ count -le 99) echo "$ count" uyqu 1 ((count ++)) amalga oshirilgan) & (count = 1000 while [$ count -le 1099] echo "$ count" uyqu 1 ((count ++)) amalga oshiriladi) & echo "Finished"

Oddiy jarayonni buyruq faylining qolgan qismi bilan ishlashdan oldin tugatilishini kutish uchun kutish so'zidan foydalaning:

($ count -le 99) echo "$ count" uyqu 1 ((count ++)) amalga oshirilgan) & (count = 1000 while [$ count -le 1099] echo "$ count" sleep 1 ((count ++)) amalga oshirildi & echo "finished"

Subshell'lar uchun ishlatiladi

Subheyslar buyruqlar muayyan muhitda yoki katalogda bajarilishi kerak bo'lsa foydalidir. Agar har bir buyruq boshqacha kismda bajarilsa, o'zgaruvchan parametrlar aralashib ketish xavfi mavjud emas. Tugallangach, sozlamalar va joriy katalog qayta tiklanishga hojat yo'q, chunki ona jarayonning muhiti uning subproseslaridan hech qanday ta'sir ko'rsatmaydi.

Subshell'lar funktsional tavsiflarda ishlatilishi mumkin, shunda ular turli parametrlar bilan bir necha bor bajarilishi mumkin.