Mundarija (36)
- Bu darsda
- 1. Nega bu kerak?
- 2. Shell o'zgaruvchisi
- 2.1 Yaratish va o'qish
- 2.2 = atrofida bo'sh joy yo'q
- 2.3 O'zbekcha qo'shimchalar bilan: ${...}
- 2.4 O'chirish va harf kattaligi
- 3. Muhit o'zgaruvchilari
- 3.1 Tizimda allaqachon bor o'zgaruvchilar
- 3.2 Bola jarayon nimani ko'radi?
- 3.3 export — bolalarga ham ber
- 3.4 Bir martalik o'zgaruvchi
- 4. PATH chuqurroq
- 4.1 PATH'ni o'qish
- 4.2 Dastur qayerdan ishlayapti?
- 4.3 PATH'ga papka qo'shish
- 5. Sozlamalarni doimiy qilish: .bashrc va .zshrc
- 5.1 Muammo
- 5.2 Yechim: shell har ochilganda o'qiydigan fayl
- 5.3 Faylga yozish
- 5.4 source — hozirning o'zida yuklash
- 6. alias — buyruqqa qisqa nom
- 7. Sirlar va xavfsizlik
- 8. PowerShell'da qanday?
- 9. Ko'p uchraydigan xatolar
- 9.1 = atrofida bo'sh joy
- 9.2 export ni unutish
- 9.3 PATH'ni buzish
- 9.4 .bashrc ni o'zgartirib, source qilmaslik
- 9.5 macOS'da .bashrc ga yozish
- 10. Mashqlar
- 1-mashq (oson): To'ldiring
- 2-mashq (o'rta): Salomlashuvchi terminal
- 3-mashq (qiyin): Nega ko'rinmaydi?
- 11. Real ishda
- Xulosa
Muhit o'zgaruvchilari va PATH: export, .bashrc va alias
Qisqacha: Shell'da o'zgaruvchi
ism=Alideb yaratiladi va$ismbilan o'qiladi.exportuni muhit o'zgaruvchisiga aylantiradi — shundan keyin shu terminaldan ishga tushgan dasturlar ham uni ko'radi.PATH— buyruqlar qidiriladigan papkalar ro'yxati. Terminal har ochilganda bajariladigan sozlamalar (export,alias)~/.bashrc(macOS'da~/.zshrc) faylida saqlanadi vasource ~/.bashrcbilan darhol yuklanadi.
Bu darsda
- Shell o'zgaruvchisini yaratasiz, o'qiysiz va o'chirasiz.
- Oddiy o'zgaruvchi bilan
exportqilingan muhit o'zgaruvchisi farqini misolda ko'rsata olasiz. PATHga papka qo'shasiz va dastur qayerdan ishga tushayotganiniwhichbilan aniqlaysiz.- Sozlamalarni
~/.bashrcyoki~/.zshrcga yozib, doimiy qilasiz;sourcenima uchun kerakligini tushunasiz. aliasbilan uzun buyruqlarga qisqa nom berasiz.
Oldin bilishingiz kerak: Dastur o'rnatish va paket menejerlari (PATH va muhit o'zgaruvchisi qismi), Exit code va buyruqlarni zanjirlash, Oqimlar, pipe va yo'naltirish.
1. Nega bu kerak?
Paket menejerlari darsida ikki narsani ko'rgan edik. Muhit o'zgaruvchisi — operatsion tizim dasturlar uchun saqlab qo'yadigan "nom — qiymat" juftligi, xuddi uy kirishidagi e'lonlar taxtasi. PATH esa shunday o'zgaruvchilardan biri: terminal buyruqlarni qaysi papkalardan qidirishini aytadi. Oldingi darsda esa $? bilan tanishdik.
Endi uchta real muammoga duch kelamiz:
- Dasturga sozlama berish. Sizning veb-serveringiz 3000-portda ishlaydi. Ertaga u serverda 8080-portda ishlashi kerak. Kodni har safar o'zgartirasizmi? Yo'q — sozlamani dasturdan tashqarida, muhitda saqlaysiz.
- Sirlarni koddan uzoq tutish. Ma'lumotlar bazasi paroli kod ichida yozilsa, kodni ko'rgan har kim uni ham ko'radi. Parollar muhit o'zgaruvchilarida turadi.
- Terminalni o'zingizga moslash. Har kuni
ls -lahyozasiz — unillga qisqartirish mumkin. Lekin terminal yopilsa, sozlamalar yo'qoladi. Ularni qayerga yozish kerak?
Bu dars uchalasiga javob beradi.
2. Shell o'zgaruvchisi
2.1 Yaratish va o'qish
O'zgaruvchi (variable) — nom berilgan, ichida qiymat saqlanadigan joy. Ustiga nom yozilgan quti deb tasavvur qiling: qutiga narsa solasiz, keyin nomi bilan chaqirib olasiz.
Git Bash, WSL yoki macOS terminalida yozing:
shahar="Toshkent"
echo "Men $shahar da yashayman"Men Toshkent da yashaymanIkki qoida:
- Yaratishda
$yo'q:shahar="Toshkent". - O'qishda
$bor:$shahar.$shell'ga "bu so'z emas, o'zgaruvchi — o'rniga qiymatini qo'y" deydi.
$ siz yozsangiz, shell uni oddiy so'z deb chiqaradi: echo shahar — shahar.
2.2 = atrofida bo'sh joy yo'q
Bu bash'dagi eng ko'p uchraydigan xato:
shahar = "Toshkent"bash: shahar: command not foundNega? Buyruq anatomiyasi darsidan eslang: bo'sh joy — buyruq qismlarini ajratadi. Shell birinchi so'z shahar ni buyruq nomi, = va "Toshkent" ni esa argumentlar deb o'qidi. shahar degan dastur yo'q — 127-xato.
Qoida: nom=qiymat — hech qanday bo'sh joysiz. Qiymat ichida bo'sh joy bo'lsa — qo'shtirnoq: ism="Ali Valiyev".
2.3 O'zbekcha qo'shimchalar bilan: ${...}
O'zbek tilida so'zga qo'shimcha qo'shamiz: "Toshkentda", "Alining". Buni sinab ko'ring:
echo "Men $shaharda yashayman"Men yashaymanShahar nomi yo'qoldi! Shell $shaharda ni bitta o'zgaruvchi nomi deb o'qidi. Bunday o'zgaruvchi yo'q — bo'sh qator qo'ydi. Nom qayerda tugashini jingalak qavs bilan ko'rsatamiz:
echo "Men ${shahar}da yashayman"Men Toshkentda yashayman${shahar} — $shahar ning o'zi, faqat chegarasi aniq. O'zgaruvchidan keyin darhol harf kelsa — doim ${...} ishlating.
2.4 O'chirish va harf kattaligi
unset shahar— o'zgaruvchini o'chiradi.shaharvaShahar— ikki xil o'zgaruvchi. Harf kattaligi muhim.
Tekshirib ko'ring:
narx=12000dan keyinecho "${narx}so'm"vaecho "$narxso'm"nima chiqaradi?
Javob
Birinchisi — 12000so'm. Ikkinchisi — faqat 'm: shell $narxso ni o'zgaruvchi nomi deb o'qidi (apostrof nomga kirmaydi), bunday o'zgaruvchi yo'q — o'rniga bo'sh qator qo'yildi. Qoida: o'zgaruvchidan keyin harf kelsa — ${narx}.
3. Muhit o'zgaruvchilari
3.1 Tizimda allaqachon bor o'zgaruvchilar
Siz hali hech narsa yaratmagan bo'lsangiz ham, shell'da o'nlab o'zgaruvchi tayyor turadi. Ularni env (environment — muhit) ko'rsatadi:
envEkranga NOM=qiymat ko'rinishidagi o'nlab qator chiqadi. Kerakligini pipe darsidagidek grep bilan ajratamiz:
env | grep "^HOME="HOME=/home/aliSizda yo'l boshqacha bo'ladi (Git Bash'da masalan /c/Users/Ali). Bitta o'zgaruvchini ko'rishning qisqa yo'li ham bor — printenv HOME: faqat qiymatini chiqaradi.
Eng ko'p kerak bo'ladiganlari:
| O'zgaruvchi | Nima saqlaydi |
|---|---|
HOME |
Uy papkangiz yo'li (~ aynan shu) |
USER |
Foydalanuvchi nomi (Git Bash'da bo'sh bo'lishi mumkin — USERNAME ni ishlating) |
PATH |
Buyruqlar qidiriladigan papkalar |
SHELL |
Qaysi shell ishlatilayapti |
PWD |
Joriy papka (pwd shu yerdan oladi) |
Muhit o'zgaruvchilari nomi odatda KATTA harflarda yoziladi. O'zingiz yaratgan vaqtinchalik o'zgaruvchilarni kichik harflarda yozish odat — shunda ular tizimnikiga aralashmaydi.
3.2 Bola jarayon nimani ko'radi?
Endi eng muhim tushuncha. OS darsidan eslang: har ishga tushgan dastur — alohida jarayon. Siz terminalda buyruq yozganingizda shell o'sha dasturni yangi jarayon qilib ishga tushiradi. Bu yangi jarayon shell'ning bola jarayoni (child process) deyiladi, shell esa — uning ota jarayoni.
Sinab ko'rish uchun bitta usul kerak: bash -c '...' — yangi, bola bash ishga tushadi va qo'shtirnoq ichidagi buyruqni bajaradi. Qo'shtirnoq bittalik (') — shunda $PORT ni ota shell emas, aynan bola o'qiydi. Qo'shtirnoq turlari farqini shell skript darsida ko'ramiz.
PORT=3000
echo "Ota shell: $PORT"
bash -c 'echo "Bola jarayon: [$PORT]"'Ota shell: 3000
Bola jarayon: []Bola jarayon PORT ni ko'rmadi — qavslar ichi bo'sh. Oddiy shell o'zgaruvchisi faqat shu shell'ning "ichki daftari"da turadi, bolalarga berilmaydi.
3.3 export — bolalarga ham ber
export PORT
bash -c 'echo "Bola jarayon: [$PORT]"'Bola jarayon: [3000]export o'zgaruvchini muhit o'zgaruvchisiga aylantiradi. Endi shu shell'dan ishga tushgan har bir dastur — bash, node, git — uni ko'radi. Yaratish va eksport qilishni bitta qatorda ham yozish mumkin: export PORT=3000.
flowchart TD
S["Ota shell<br/>PORT=3000 (oddiy)<br/>export API_URL=..."] --> B1["Bola: node server.js<br/>API_URL ni ko'radi<br/>PORT ni ko'rmaydi"]
S --> B2["Bola: bash -c ...<br/>API_URL ni ko'radi<br/>PORT ni ko'rmaydi"]
B1 -.-> X["Bola o'zgartirsa ham<br/>ota o'zgarmaydi"]O'xshatish: oila kundaligi. Ota o'z daftariga yozgani (PORT=3000) — faqat o'zi uchun. Devordagi e'lonlar taxtasiga osgani (export) — uyga kirgan har bir bola ko'radi. Bola esa taxtadagi yozuvning nusxasini oladi: o'z nusxasini o'zgartirsa, otaning taxtasi o'zgarmaydi.
JavaScript'da (Node.js) muhit o'zgaruvchisi process.env.PORT deb o'qiladi — buni Node.js darsida ko'rasiz. Hozir shuni biling: dastur faqat export qilingan o'zgaruvchini ko'ra oladi.
3.4 Bir martalik o'zgaruvchi
Faqat bitta buyruq uchun qiymat berish kerak bo'lsa, uni buyruqning oldiga yozasiz:
SHAHAR=Buxoro bash -c 'echo "Bir martalik: $SHAHAR"'
echo "Keyin: [$SHAHAR]"Bir martalik: Buxoro
Keyin: []SHAHAR faqat o'sha buyruqqa berildi va shell'da qolmadi. Real loyihalarda shunday qatorni uchratasiz: PORT=8080 npm start — "serverni bu safar 8080-portda ishga tushir".
Tekshirib ko'ring:
KALIT=abcyozildi (export'siz). Keyin shu terminaldanode app.jsishga tushirildi. DasturKALITni ko'radimi?
Javob
Yo'q. node — shell'ning bola jarayoni, oddiy shell o'zgaruvchisi esa bolalarga o'tmaydi. export KALIT=abc yoki bir martalik KALIT=abc node app.js kerak.
4. PATH chuqurroq
4.1 PATH'ni o'qish
echo $PATH/usr/local/bin:/usr/bin:/bin:/home/ali/.local/binPapkalar : bilan ajratilgan (Windows'da ; bilan). Uzun qatorni o'qish qiyin — tr (translate — belgini almashtirish) bilan har : ni yangi qatorga aylantiramiz:
echo $PATH | tr ':' '\n'/usr/local/bin
/usr/bin
/bin
/home/ali/.local/binShell buyruqni shu papkalardan tartib bilan qidiradi va birinchi topganini ishga tushiradi.
4.2 Dastur qayerdan ishlayapti?
which git/usr/bin/gitwhich PATH bo'ylab qidirib, qaysi fayl ishga tushishini ko'rsatadi. "Yangi versiyani o'rnatdim, lekin eskisi ishlayapti" degan holatda birinchi yozadigan buyruq — shu.
which faqat PATH'dagi dasturlarni biladi. Shell'ning ichki buyruqlari va alias'lar uchun buyruq anatomiyasi darsidagi type yaxshiroq:
type cd
type lscd is a shell builtin
ls is /usr/bin/ls4.3 PATH'ga papka qo'shish
Aytaylik, o'zingizning kichik dasturlaringizni ~/bin papkasida saqlaysiz va ularni istalgan joydan nomi bilan chaqirmoqchisiz:
export PATH="$HOME/bin:$PATH"Bo'laklaymiz:
$HOME/bin— yangi papka.:— ajratgich.$PATH— eski ro'yxatning hammasi.- Natija
PATHga qayta yoziladi vaexportqilinadi.
Ya'ni: "yangi papka + eski ro'yxat". Yangi papka boshida turgani uchun shell avval unga qaraydi. Oxiriga qo'shish ham mumkin: "$PATH:$HOME/bin" — unda u eng oxirida tekshiriladi.
Diqqat:
$PATHni yozishni unutsangiz —export PATH="$HOME/bin"— eski ro'yxat butunlay o'chadi. Endils,git, hattomkdirhamcommand not foundberadi. Qo'rqmang: bu faqat shu terminal oynasi uchun. Oynani yopib, yangisini oching — PATH tiklanadi.
Windows'da PATH'ni doimiy o'zgartirish grafik oyna orqali bo'ladi — paket menejerlari darsida ko'rgan edik.
Tekshirib ko'ring:
export PATH="/opt/node/bin:$PATH"dan keyin/opt/node/binda ham,/usr/binda hamnodebor.nodeyozilsa, qaysi biri ishga tushadi? Buni qanday tekshirasiz?
Javob
/opt/node/bin dagisi — u ro'yxat boshida turibdi, shell birinchi topganini ishga tushiradi. Tekshirish: which node.
5. Sozlamalarni doimiy qilish: .bashrc va .zshrc
5.1 Muammo
export PORT=3000 ni yozdingiz, terminalni yopdingiz, qayta ochdingiz — echo $PORT bo'sh. Hamma o'zgaruvchi va sozlama shell jarayonining xotirasida yashaydi. Jarayon tugadi — ular ham yo'qoldi.
5.2 Yechim: shell har ochilganda o'qiydigan fayl
Shell ishga tushganda uy papkangizdagi maxsus faylni o'qiydi va ichidagi buyruqlarni birma-bir bajaradi. U yerga yozilgan export va alias har yangi oynada o'zi bajariladi.
| Qayerda | Shell | Fayl |
|---|---|---|
| Ubuntu, WSL | bash | ~/.bashrc |
| macOS | zsh | ~/.zshrc |
| Git Bash | bash | ~/.bashrc (~/.bash_profile orqali) |
Fayl nomi nuqta bilan boshlanadi — demak u yashirin. ls -a ~ bilan ko'rinadi. Nomdagi "rc" — eski "run commands" (ishga tushirish buyruqlari) iborasidan qolgan.
Yana bir fayl uchrashi mumkin — ~/.profile (yoki ~/.bash_profile). U tizimga kirishda bir marta o'qiladi. Boshlovchi uchun oddiy qoida: o'z sozlamalaringizni ~/.bashrc ga (macOS'da ~/.zshrc ga) yozing.
Maslahat: Git Bash
~/.bashrcni to'g'ridan-to'g'ri emas,~/.bash_profileorqali o'qiydi. Siz faqat.bashrcyaratsangiz, Git Bash keyingi ochilishda qizilWARNING: Found ~/.bashrc but no ~/.bash_profile...yozuvini chiqaradi. Qo'rqmang: u o'zi.bash_profileyaratib, muammoni hal qiladi. Keyingi safar ogohlantirish chiqmaydi.
5.3 Faylga yozish
Eng oddiy yo'l — oqimlar darsidagi >>:
echo 'export PORT=3000' >> ~/.bashrcTashqarida bittalik qo'shtirnoq: faylga $ belgilari o'zgarmasdan, aynan shunday yozilsin. Ikki narsaga ehtiyot bo'ling:
- Faqat
>>! Bitta>butun.bashrcni o'chirib yuboradi. - Faylni muharrirda ochish ham mumkin:
nano ~/.bashrc(Linux, WSL va Git Bash'da bor; saqlash —Ctrl + O,Enter, chiqish —Ctrl + X). VS Code o'rnatgan bo'lsangiz —code ~/.bashrc.
5.4 source — hozirning o'zida yuklash
Faylni o'zgartirdingiz, lekin ochiq terminal buni bilmaydi — u faylni faqat ochilganda o'qigan edi. Ikki yo'l bor: terminalni yopib qayta ochish yoki:
source ~/.bashrcsource faylni joriy shell ichida bajaradi. Qisqa shakli — nuqta: . ~/.bashrc.
Nega bash ~/.bashrc emas? Chunki bash bola jarayon ochadi. Fayl o'sha bolada bajariladi, bola tugaydi — va barcha export lar u bilan birga yo'qoladi. 3-bo'limdagi qoidani eslang: bola otaga ta'sir qilmaydi.
echo 'export MEVA=olma' > sozlama.sh
bash sozlama.sh
echo "bash bilan: [$MEVA]"
source sozlama.sh
echo "source bilan: [$MEVA]"bash bilan: []
source bilan: [olma]Tekshirib ko'ring: Malika
~/.zshrcgaexport API_URL=https://example.comqo'shdi va shu terminalda darholecho $API_URLyozdi. Natija bo'sh. Nima qilish kerak?
Javob
source ~/.zshrc (yoki terminalni qayta ochish). Ochiq shell .zshrc ni faqat ishga tushganda o'qigan — keyingi o'zgarishlarni bilmaydi.
6. alias — buyruqqa qisqa nom
Alias (taxallus) — uzun buyruqqa siz bergan qisqa nom. Telefondagi "tezkor raqam"ga o'xshaydi: 1 ni bossangiz, onangizning raqami teriladi.
alias ll='ls -lah'
llEndi ll yozsangiz, shell uni ls -lah ga almashtirib bajaradi. Qoidalar o'zgaruvchidagidek: = atrofida bo'sh joy yo'q, buyruq qo'shtirnoq ichida.
| Buyruq | Nima qiladi |
|---|---|
alias |
Barcha alias'lar ro'yxati |
type ll |
ll is aliased to `ls -lah' |
unalias ll |
Alias'ni o'chiradi |
Dasturchilar ko'p yozadigan alias'lar:
alias ll='ls -lah'
alias gs='git status'
alias ..='cd ..'Alias ham faqat shu terminalda yashaydi. Doimiy qilish — .bashrc ga yozish va source:
echo "alias ll='ls -lah'" >> ~/.bashrc
source ~/.bashrcBu safar tashqarida ikkitalik, ichida bittalik qo'shtirnoq. Ichida $ yo'q — shuning uchun ikkitalik qo'shtirnoq xavfsiz.
Maslahat: Alias'ni mavjud buyruq nomi bilan atamang (masalan,
alias ls='rm'). O'zingizni chalg'itasiz, boshqa odam esa sizning terminalingizda umuman adashadi.
7. Sirlar va xavfsizlik
Muhit o'zgaruvchilari parollarni koddan ajratadi — lekin ularni ham ehtiyot qilish kerak:
- Tarix. Terminalda yozgan har bir buyruq tarixga tushadi (harakatlanish darsidagi
↑vaCtrl + Ro'shani ko'rsatadi).export PAROL=...yozsangiz, parol~/.bash_historyfaylida qoladi. - Ekran rasmi.
envnatijasini skrinshot qilib guruhga tashlash — undagi hamma kalitlarni tarqatish degani. .bashrcni ulashish. Sozlamalaringizni GitHub'ga qo'ymoqchi bo'lsangiz, avval ichida parol yo'qligini tekshiring.
Real loyihalarda sirlar .env degan alohida faylda saqlanadi va Git'ga qo'shilmaydi. Uni YAML, TOML va .env darsida o'rganamiz.
8. PowerShell'da qanday?
PowerShell'da muhit o'zgaruvchilari $env: bilan boshlanadi:
| Vazifa | bash | PowerShell |
|---|---|---|
| O'qish | echo $HOME |
$env:USERPROFILE |
| Yaratish | export PORT=3000 |
$env:PORT = "3000" |
| Ro'yxat | env |
Get-ChildItem Env: |
| Sozlama fayli | ~/.bashrc |
$PROFILE |
PowerShell'da $env:PORT = "3000" ham faqat shu oyna uchun. Windows'da oddiy o'zgaruvchini doimiy qilishning bir yo'li — setx PORT 3000. U qiymatni Windows sozlamalariga yozadi, lekin faqat keyin ochilgan oynalar uni ko'radi; joriy oynada $env:PORT o'zgarmaydi. PATH uchun esa setx ishlatilmaydi — sababini PowerShell darsida ko'rasiz.
9. Ko'p uchraydigan xatolar
9.1 = atrofida bo'sh joy
bash: PORT: command not foundPORT = 3000 yozilgan. Shell PORT ni buyruq deb o'qidi. PORT= 3000 (faqat o'ngda bo'sh joy) esa boshqacha xato beradi: bash: 3000: command not found — shell PORT ni bo'sh qiymat bilan belgilab, 3000 ni buyruq sifatida ishga tushirmoqchi bo'ldi. Tuzatish: PORT=3000.
9.2 export ni unutish
Siz API_URL=... yozdingiz, dastur esa "API_URL topilmadi" deyapti. Shell'da echo $API_URL ishlaydi, lekin dasturda yo'q. Sababi — bola jarayon oddiy o'zgaruvchini ko'rmaydi. Tuzatish: export API_URL=....
9.3 PATH'ni buzish
bash: ls: command not foundls kabi oddiy buyruq ham topilmayapti — demak PATH ustidan yozilgan ($PATH qismi unutilgan). Tuzatish: terminalni yopib qayta oching. Xato .bashrc ga yozilgan bo'lsa, yangi oynada ham takrorlanadi. Unda muharrirni to'liq yo'li bilan oching (masalan /usr/bin/nano ~/.bashrc) va qatorni tuzating.
9.4 .bashrc ni o'zgartirib, source qilmaslik
"Alias qo'shdim — ishlamayapti!" — bash: ll: command not found. Fayl o'zgardi, lekin ochiq shell uni qayta o'qimadi. Tuzatish: source ~/.bashrc.
9.5 macOS'da .bashrc ga yozish
macOS 2019-yildan beri zsh ishlatadi va .bashrc ni umuman o'qimaydi. Sozlamalar ishlamasa — echo $SHELL bilan tekshiring. /bin/zsh bo'lsa, ~/.zshrc ga yozing.
10. Mashqlar
1-mashq (oson): To'ldiring
ismo'zgaruvchisigaJasurni yozish:ismJasur- Uni ekranga chiqarish:
echo - Bola jarayonlar ham ko'rishi uchun:
ism .bashrcdagi o'zgarishni darhol yuklash:~/.bashrc
Yechim
ism=Jasur
echo $ism
export ism
source ~/.bashrc= atrofida bo'sh joy yo'q. O'qishda $ kerak. export — bolalarga berish. source — faylni joriy shell'da bajarish.
2-mashq (o'rta): Salomlashuvchi terminal
Shunday qiling: har safar terminal ochilganda Xush kelibsiz, <ismingiz>! degan yozuv chiqsin va ll alias'i ishlasin. Ikki buyruq bilan .bashrc ga (macOS'da .zshrc ga) yozing, keyin yangi terminal ochmasdan tekshiring.
Ishora: .bashrc ichidagi buyruqlar oddiy buyruqlar kabi bajariladi — echo ham.
Yechim
echo 'echo "Xush kelibsiz, Aziz!"' >> ~/.bashrc
echo "alias ll='ls -lah'" >> ~/.bashrc
source ~/.bashrcXush kelibsiz, Aziz!source faylni bajardi — salomlashuv darhol chiqdi. Endi ll ham ishlaydi. Yangi oyna ochsangiz, salomlashuv o'zi chiqadi.
Ikkala qatorda ham faqat >> — bitta > faylning oldingi sozlamalarini o'chirib yuborardi. Birinchi qatorda tashqi qo'shtirnoq bittalik: shunda faylga ichki echo "..." aynan shunday yoziladi.
3-mashq (qiyin): Nega ko'rinmaydi?
Ali shunday yozdi:
DB_NOMI=dokon
bash -c 'echo "Baza: $DB_NOMI"'
echo "Baza: $DB_NOMIning jadvallari"Natija:
Baza:
Baza: jadvallariIkkala qatordagi muammoni toping va tuzating. Natija Baza: dokon va Baza: dokonning jadvallari bo'lsin.
Yechim
bash -c— bola jarayon.DB_NOMIexport qilinmagan, shuning uchun bola uni ko'rmadi.$DB_NOMIning— shellDB_NOMIningdegan (yo'q) o'zgaruvchini qidirdi.
export DB_NOMI=dokon
bash -c 'echo "Baza: $DB_NOMI"'
echo "Baza: ${DB_NOMI}ning jadvallari"Baza: dokon
Baza: dokonning jadvallari11. Real ishda
- Server sozlamalari. Bitta kod kompyuteringizda
PORT=3000bilan, serverdaPORT=80bilan ishlaydi. Kod o'zgarmaydi — faqat muhit. - Sirlar. Ma'lumotlar bazasi manzili, to'lov tizimi (Click, Payme) kalitlari — hammasi muhit o'zgaruvchilarida. Kodda — faqat
process.env.PAYME_KEYkabi nom. - "Menda ishlaydi, senda yo'q". Ko'pincha sababi — boshqa PATH yoki yetishmayotgan muhit o'zgaruvchisi.
which nodevaenv | grep ...— birinchi tekshiruvlar. - Dotfiles. Tajribali dasturchilar
.bashrc,.zshrckabi sozlama fayllarini (ularni "dotfiles" deyishadi) GitHub'da saqlaydi va yangi kompyuterda bir daqiqada o'z muhitini tiklaydi. - Intervyu. "Muhit o'zgaruvchisi nima va nega parolni kodga yozmaymiz?", "
exportnima qiladi?" — backend va DevOps intervyularida so'raladi.
Xulosa
- O'zgaruvchi:
nom=qiymat(bo'sh joysiz), o'qish —$nom, qo'shimcha bilan —${nom}da. exporto'zgaruvchini muhitga chiqaradi — bola jarayonlar (dasturlar) faqat shuni ko'radi.PATH— buyruqlar qidiriladigan papkalar; qo'shish:export PATH="$HOME/bin:$PATH"; tekshirish:which.- Doimiy sozlamalar —
~/.bashrc(macOS:~/.zshrc); o'zgarishni yuklash —source ~/.bashrc. alias ll='ls -lah'— uzun buyruqqa qisqa nom.- Parollarni tarixga va skrinshotlarga tushirmang.
Keyingi dars: Jarayonlar va band portlar — ishlayotgan dasturlarni ko'rish, to'xtatish va port already in use xatosini hal qilishni o'rganamiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!