Sakkizta kam ma'lum bo'lgan Bash variantlari

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 shu yerda yoki shu yerda.

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. kelib chiqishi. Variantlar 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

a Izoh qo'shish