Kai kurios Bash parinktys yra gerai žinomos ir dažnai naudojamos. Pavyzdžiui, daugelis žmonių rašo scenarijaus pradžioje
nustatyti -o xtrace
derinimui,
nustatyti -o errexit
išeiti per klaidą arba
set -o errunset
išeiti, jei vadinamas kintamasis nenustatytas.
Tačiau yra daug kitų variantų. Kartais manose jie aprašomi pernelyg painiai, todėl čia surinkau keletą naudingiausių su paaiškinimu.
Pastaba: „Mac“ gali turėti senesnę „bash“ versiją (3.x, o ne 4.x), kur galimos ne visos šios parinktys. Šiuo atveju žr
set
arba shopt
?
Yra du būdai nustatyti bash parinktis: iš scenarijaus arba iš komandinės eilutės. Galite naudoti įmontuotas komandas set
и shopt
. Abu keičia apvalkalo elgesį, daro beveik tą patį (su skirtingais argumentais), bet skiriasi savo set
yra paveldimi arba pasiskolinti iš kitų apvalkalų parametrų, o parametrai shopt
sukurtas bash.
Jei norite pamatyti dabartines parinktis, paleiskite:
$ set -o
$ shopt
Norėdami suaktyvinti parinktį set
Naudojama ilgoji arba trumpoji sintaksė:
$ set -o errunset
$ set -e
Poveikis toks pat.
Norėdami išjungti parinktį, vietoj minuso turite įdėti pliusą:
$ set +e
Ilgą laiką negalėjau prisiminti šios sintaksės, nes logika atrodė neteisinga (minuso ženklas įgalina parinktį, o pliuso ženklas ją išjungia).
В shopt
(logiškesnės) vėliavėlės naudojamos parinktims įjungti ir išjungti -s
(rinkinys) ir -u
(išjungta):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Katalogų keitimas
Yra keletas parinkčių, padedančių dirbti su katalogais.
1.cdspell
Pasirinkus šį nustatymą, bash pradės suprasti rašybos klaidas ir nukreips jus į aplanką, kurio pavadinimą neteisingai parašėte.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Jau daug metų naudojuosi šia galimybe ir labai retai (gal kartą per metus) priima labai keistą sprendimą. Bet kitomis dienomis cdspell
taupo laiką, tiesiog kiekvieną dieną.
2. autocd
Jei nenorite susitaikyti su kelių įrašų neveiksmingumu cd
, tada galite nustatyti šią parinktį perkelti į X aplanką, jei X komandos nėra.
$ shopt -s autocd
$ abcdefg
$ cd ..
Kartu su automatiniu užbaigimu tai leidžia greitai pereiti tarp aplankų:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Tik nesuteikite aplanko pavadinimo rm -rf *
(taip, beje, tai įmanoma).
3.išplėsti
Tai puiki parinktis, kuri išplečia aplinkos kintamuosius paspaudus Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
Švari išvestis
4. tikrinti darbus
Ši parinktis sustabdo atsijungimą nuo seanso, jei fone vis dar yra užduočių.
Užuot išėjus, rodomas nebaigtų užduočių sąrašas. Jei vis tiek norite išeiti, įveskite dar kartą 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 процесса изменился
Pakeitimo supergalios
5.globstar
Ši parinktis suteikia jums pakeitimo supergalių! Jei įvesite:
$ shopt -s globstar
$ ls **
tada apvalkalas rekursyviai parodys visus katalogus ir pakatalogius.
Kartu su direxpand
Galite greitai peržiūrėti viską, kas yra žemiau hierarchijos:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Ši parinktis įgalina funkcijas, kurios dažniau siejamos su reguliariosiomis išraiškomis. Kartais tai labai naudinga:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Čia raštai dedami skliausteliuose ir atskiriami vertikalia juosta. Čia yra galimi operatoriai:
? = atitinka nulį arba vieną nurodytų šablonų atvejį! = rodyti viską, kas neatitinka pateiktų šablonų * = nulis ar daugiau atvejų + = vienas ar daugiau atvejų @ = tiksliai vienas įvykis
Apsauga nuo nelaimingų atsitikimų
7. histverify
Iš pradžių gali būti šiek tiek baisu naudoti greito paleidimo komandas iš santrumpų istorijos !!
и !$
.
Variantas histverify
leidžia pirmiausia pamatyti, kaip Bash interpretuoja komandą, kol ji iš tikrųjų paleidžiama:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Nokloberis
Vėlgi, siekiant apsisaugoti nuo nelaimingų atsitikimų, būtent nuo jau esančio failo perrašymo naudojant peradresavimo operatorių (>
). Tai gali būti nelaimė, jei neturite atsarginės kopijos.
Variantas set -С
draudžia tokį perrašymą. Jei reikia, apsaugą galite apeiti naudodami operatorių >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Šaltinis: www.habr.com