Osem malo znanih možnosti Bash

Nekatere možnosti Bash so dobro znane in pogosto uporabljene. Na primer, veliko ljudi piše na začetku scenarija

nastavi -o xtrace

za odpravljanje napak,

nastavite -o errexit

pomotoma izstopiti oz

set -o napaka

za izhod, če klicana spremenljivka ni nastavljena.

Vendar obstaja veliko drugih možnosti. Včasih so v manah opisani preveč zmedeno, zato sem tukaj zbral nekaj najbolj uporabnih z razlago.

Opomba: računalniki Mac imajo morda starejšo različico bash (3.x namesto 4.x), kjer niso na voljo vse te možnosti. V tem primeru glej tukaj ali tukaj.

set ali shopt?

Možnosti bash lahko nastavite na dva načina: iz skripta ali iz ukazne vrstice. Uporabite lahko vgrajene ukaze set и shopt. Oba spreminjata vedenje lupine, delata približno isto stvar (z različnimi argumenti), vendar se razlikujeta po svojih izvor. Opcije set so podedovani ali izposojeni od parametrov drugih lupin, medtem ko parametri shopt ustvarjen v bashu.

Če želite videti trenutne možnosti, zaženite:

$ set -o
$ shopt

Za aktiviranje možnosti v set Uporablja se dolga ali kratka sintaksa:

$ set -o errunset
$ set -e

Učinek je enak.

Če želite onemogočiti možnost, morate namesto minusa dati plus:

$ set +e

Dolgo časa se nisem mogel spomniti te sintakse, ker se mi je logika zdela napačna (znak minus omogoči možnost, znak plus pa jo onemogoči).

В shopt (bolj logične) zastavice se uporabljajo za omogočanje in onemogočanje možnosti -s (set) in -u (nenastavljeno):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Spreminjanje imenikov

Obstaja več možnosti, ki vam pomagajo pri delu z imeniki.

1.cdspell

S to nastavitvijo bo bash začel razumeti tipkarske napake in vas popeljal v mapo, katere ime ste napačno črkovali.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

To možnost uporabljam že vrsto let in zelo redko (mogoče enkrat na leto) naredi zelo čudno odločitev. Ampak ob drugih dneh cdspell prihrani čas, dobesedno vsak dan.

2. autocd

Če niste pripravljeni sprejeti neučinkovitosti večkratnih vnosov cd, potem lahko to možnost nastavite tako, da se premakne v mapo X, če ukaz X ne obstaja.

$ shopt -s autocd
$ abcdefg
$ cd ..

V kombinaciji s samodokončanjem vam to omogoča hitro skakanje med mapami:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Samo ne poimenuj mape rm -rf * (ja, mimogrede, to je mogoče).

3.direxpand

To je kul možnost, ki razširi spremenljivke okolja s pritiskom na Tab:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

čisti izhod

4. checkjobs

Ta možnost ustavi odjavo iz seje, če v ozadju še vedno potekajo opravila.

Namesto izhoda se prikaže seznam nedokončanih opravil. Če še vedno želite izstopiti, vstopite znova 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 процесса  изменился

Nadomestne velemoči

5.globstar

Ta možnost vam daje nadomestne supermoči! Če vnesete:

$ shopt -s globstar
$ ls **

potem bo lupina rekurzivno prikazala vse imenike in podimenike.

V kombinaciji z direxpand Hitro si lahko ogledate vse nižje v hierarhiji:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Ta možnost omogoča funkcije, ki so pogosteje povezane z regularnimi izrazi. Včasih je to zelo koristno:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Tukaj so vzorci postavljeni v oklepaje in ločeni z navpično črto. Tukaj so razpoložljivi operaterji:

? = se ujema z nič ali eno pojavitvijo danih vzorcev! = pokaži vse, kar se ne ujema z danimi vzorci * = nič ali več pojavitev + = ena ali več pojavitev @ = točno ena pojavitev

Zaščita pred nesrečami

7. histverify

Na začetku je lahko nekoliko strašljivo, če uporabimo ukaze za hitri zagon iz zgodovine okrajšav !! и !$.

Možnost histverify vam omogoča, da najprej vidite, kako Bash interpretira ukaz, preden se dejansko zažene:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

Spet za zaščito pred nesrečami, in sicer pred prepisovanjem datoteke, ki že obstaja z operaterjem preusmeritve (>). To je lahko katastrofa, če nimate varnostne kopije.

Možnost set -С prepoveduje takšno prepisovanje. Po potrebi lahko zaščito zaobidete z operaterjem >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

Vir: www.habr.com

Dodaj komentar