Aštuonios mažai žinomos Bash parinktys

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 čia arba čia.

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 kilmės. Galimybės 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

Добавить комментарий