Zsh — interaktiv buyruq qatori muhiti va skript interpreteri bo‘lib, nomi Z shell iborasidan kelib chiqqan. U Bourne shell oilasiga mansub sintaksisni saqlagan holda kuchli avtomatik to‘ldirish, globbing, imlo tuzatish, prompt sozlash va kengaytirilgan massiv imkoniyatlarini taqdim etadi. Zsh Unixsimon tizimlarda ishlaydi va macOSning zamonaviy versiyalarida interaktiv foydalanuvchi uchun standart shell sifatida qo‘llanadi.
Interaktiv imkoniyatlar
Zsh completion tizimi faqat fayl nomini emas, buyruqning subcommand, option va argument turini ham hisobga olishi mumkin. Masalan, versiya nazorati buyrug‘ida branch nomlari, jarayon buyrug‘ida esa process identifikatorlari taklif qilinadi. compinit completion funksiyalarini ishga tayyorlaydi; qo‘shimcha completion ta’riflari kataloglar orqali yuklanadi.
Command history bir nechta terminal sessiyasi o‘rtasida bo‘lishilishi mumkin. History qidiruvi avvalgi buyruqni prefiks yoki matn bo‘yicha topadi. Zsh line editor, ya’ni ZLE, buyruq satridagi tugma birikmalari va tahrirlash rejimini boshqaradi. Emacs va vi uslubidagi keymaplar mavjud.
Fayl nomlarini kengaytirish
Oddiy * va ? wildcardlardan tashqari Zsh recursive glob va qualifierlarni qo‘llaydi. Masalan, faqat katalog yoki ma’lum vaqtda o‘zgargan fayllarni pattern bilan tanlash mumkin. **/ ichki kataloglar bo‘ylab qidirishga xizmat qiladi. Keng globbing kuchli bo‘lsa-da, pattern noto‘g‘ri yozilganda kutilmagan fayllar to‘plami tanlanishi mumkin.
Zshda unmatched pattern odatda xato berishi mumkin, Bashda esa sozlamaga qarab matnning o‘zi qoladi. Skriptni bir shelldan boshqasiga ko‘chirganda shunday semantik farqlar tekshiriladi.
Sozlash fayllari
Zsh ishga tushish turiga qarab bir nechta faylni o‘qiydi. .zshenv barcha sessiyalarda, .zprofile login shell uchun, .zshrc interaktiv shell uchun, .zlogin esa login jarayonining keyingi bosqichida ishlatiladi. Alias, prompt, completion va interaktiv pluginlar odatda .zshrcga yoziladi. Har jarayonda kerak bo‘lmagan og‘ir buyruqni .zshenvga joylash shell ishga tushishini sekinlashtiradi.
Plugin va tema tizimlari
Zshning o‘zi plugin manager talab qilmaydi, ammo konfiguratsiyani tarqatadigan framework va managerlar keng tarqalgan. Ular Git holatini ko‘rsatuvchi prompt, syntax highlighting va completion paketlarini ulaydi. Har plugin shell ochilish vaqtida kod bajarishi sababli tezlik, kod manbasi va yangilanish xavfsizligi hisobga olinadi.
Skript mosligi
Zsh ko‘p sh sintaksisini tushunsa ham, Bash bilan to‘liq bir xil emas. Array indekslari, word splitting va optionlar farq qiladi. Skriptning shebang qatori uning mo‘ljallangan interpreterini aniq ko‘rsatadi. Portativ skript POSIX sintaksisiga, Zshga xos skript esa hujjatlashtirilgan Zsh xususiyatlariga tayanadi.
Prompt kengaytmalari
Zsh prompti %n, %~ kabi escape ketma-ketliklari bilan foydalanuvchi va joriy yo‘lni ko‘rsatadi. precmd har promptdan oldin, preexec esa buyruq bajarilishidan oldin chaqiriladigan hook sifatida ishlatilishi mumkin. Tema Git holatini aniqlash uchun tashqi buyruqni har safar ishga tushirsa, katta repositoryda sezilarli kechikish paydo bo‘ladi. Asinxron prompt komponentlari bu ma’lumotni fon rejimida yangilashi mumkin, lekin eski natijani ko‘rsatish ehtimolini boshqaradi. Promptdagi rang escape kodlari satr uzunligini noto‘g‘ri hisoblatmasligi uchun Zshning non-printing belgilar sintaksisiga mos yoziladi.
Optionlar
Zsh xatti-harakati ko‘plab optionlar bilan boshqariladi. setopt optionni yoqadi, unsetopt o‘chiradi. Interaktiv qulaylik uchun yoqilgan AUTO_CD yoki imlo tuzatish kabi imkoniyat skript semantikasiga tasodifan ta’sir qilmasligi kerak. Funksiya emulate -L zsh orqali lokal, oldindan ma’lum option muhitini yaratishi mumkin. Bu foydalanuvchining shaxsiy .zshrc sozlamalari plugin funksiyasining natijasini o‘zgartirib yuborishini kamaytiradi.
Bog‘liq tushunchalar
shell, Bash, POSIX, command completion, globbing, ZLE, terminal