Ba'zi Bash variantlari yaxshi ma'lum va tez-tez ishlatiladi. Misol uchun, ko'p odamlar stsenariyning boshida yozadilar
-o xtrace-ni o'rnating
disk raskadrovka uchun,
to'siq - errexit
xato bilan chiqish yoki
set -o xatosi
chaqirilgan o'zgaruvchi o'rnatilmagan bo'lsa, chiqish uchun.
Ammo boshqa ko'plab variantlar mavjud. Ba'zan ular manasda juda chalkash tasvirlangan, shuning uchun men bu erda eng foydalilarini tushuntirish bilan birga to'pladim.
Eslatma: Mac kompyuterlarida bashning eski versiyasi (3.x emas, 4.x) boΚ»lishi mumkin, bu opsiyalarning hammasi ham mavjud emas. Bunday holda, qarang
set
yoki shopt
?
Bash parametrlarini o'rnatishning ikki yo'li mavjud: skriptdan yoki buyruq satridan. Siz o'rnatilgan buyruqlardan foydalanishingiz mumkin set
ΠΈ shopt
. Ikkalasi ham qobiqning xatti-harakatini o'zgartiradi, deyarli bir xil narsani qiladi (turli dalillar bilan), lekin bir-biridan farq qiladi. set
boshqa qobiqlarning parametrlaridan meros bo'lib yoki qarzga olinadi, parametrlar esa shopt
bash da yaratilgan.
Agar joriy variantlarni ko'rishni istasangiz, ishga tushiring:
$ set -o
$ shopt
Variantni faollashtirish uchun set
Uzoq yoki qisqa sintaksis ishlatiladi:
$ set -o errunset
$ set -e
Ta'siri bir xil.
Variantni o'chirish uchun siz minus o'rniga ortiqcha qo'yishingiz kerak:
$ set +e
Uzoq vaqt davomida men bu sintaksisni eslay olmadim, chunki mantiq noto'g'ri tuyuldi (minus belgisi variantni yoqadi va ortiqcha belgisi uni o'chiradi).
Π shopt
(ko'proq mantiqiy) bayroqlar variantlarni yoqish va o'chirish uchun ishlatiladi -s
(to'siq) va -u
(o'rnatilmagan):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Kataloglarni o'zgartirish
Kataloglar bilan ishlashga yordam beradigan bir qancha variantlar mavjud.
1.cdspell
Ushbu sozlama bilan bash matn terish xatolarini tushuna boshlaydi va sizni noto'g'ri yozilgan papkaga olib boradi.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Men bu variantni ko'p yillar davomida ishlataman va juda kamdan-kam hollarda (balki yiliga bir marta) juda g'alati qaror qabul qiladi. Ammo boshqa kunlarda cdspell
vaqtni tejaydi, tom ma'noda har kuni.
2. autocd
Agar siz bir nechta yozuvlarning samarasizligini qabul qilishni xohlamasangiz cd
, keyin X buyrug'i mavjud bo'lmasa, ushbu parametrni X jildiga o'tkazish uchun sozlashingiz mumkin.
$ shopt -s autocd
$ abcdefg
$ cd ..
Avtomatik to'ldirish bilan birgalikda bu sizga papkalar o'rtasida tezda o'tish imkonini beradi:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Faqat jildga nom bermang rm -rf *
(ha, aytmoqchi, bu mumkin).
3.direxpand
Bu Tab tugmasini bosish orqali muhit o'zgaruvchilarini kengaytiradigan ajoyib variant:
$ shopt -s direxpand
$ ./[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/current_working_folder
$ ~/[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/home/folder
$ $HOME/[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/home/folder
Toza chiqish
4. nazorat ishlari
Agar fonda ishlayotgan ishlar mavjud bo'lsa, ushbu parametr seansdan chiqishni to'xtatadi.
Chiqish o'rniga tugallanmagan vazifalar ro'yxati ko'rsatiladi. Agar siz hali ham chiqmoqchi bo'lsangiz, yana kiriting exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π»Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π»Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΡΠΎΡ ΠΆΠ΅
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= Π½Π° ΡΡΠΎΡ ΡΠ°Π· ID ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ
Almashtirish super kuchlari
5.globstar
Bu variant sizga almashtirish super kuchlarini beradi! Agar kiritsangiz:
$ shopt -s globstar
$ ls **
keyin qobiq barcha katalog va pastki kataloglarni rekursiv ravishda ko'rsatadi.
Bilan birga direxpand
Siz ierarxiyadagi hamma narsani tezda ko'rishingiz mumkin:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Ushbu parametr odatdagi iboralar bilan ko'proq bog'langan xususiyatlarni yoqadi. Ba'zan bu juda foydali:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Bu erda naqshlar qavslar ichiga joylashtiriladi va vertikal chiziq bilan ajratiladi. Mana mavjud operatorlar:
? = berilgan naqshlarning nolga yoki bittasiga mos keladi! = berilgan naqshlarga mos kelmaydigan hamma narsani ko'rsatish * = nol yoki bir nechta hodisa + = bir yoki bir nechta hodisa @ = aniq bir hodisa
Baxtsiz hodisalardan himoya qilish
7. histverify
Qisqartmalar tarixidan tezkor ishga tushirish buyruqlaridan foydalanish dastlab biroz qo'rqinchli bo'lishi mumkin !!
ΠΈ !$
.
Variant histverify
Bash buyruqni ishga tushirishdan oldin qanday izohlashini ko'rishga imkon beradi:
$ shopt -s histverify
$ echo !$ # <= ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Enter ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
$ echo histverify # <= ΠΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅,
histverify # <= Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
8. Noclobber
Shunga qaramay, baxtsiz hodisalardan himoya qilish uchun, ya'ni qayta yo'naltirish operatori bilan allaqachon mavjud bo'lgan faylni qayta yozishdan (>
). Agar zaxirangiz bo'lmasa, bu falokat bo'lishi mumkin.
Variant set -Π‘
bunday qayta yozishni taqiqlaydi. Agar kerak bo'lsa, operator yordamida himoyani chetlab o'tishingiz mumkin >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Manba: www.habr.com