Kaheksa vähetuntud bashi valikut

Mõned Bashi valikud on hästi tuntud ja sageli kasutatavad. Näiteks kirjutavad paljud inimesed stsenaariumi algusesse

sea ​​-o xtrace

silumiseks,

sead -o errexit

kogemata väljuda või

set -o errunset

väljumiseks, kui kutsutav muutuja pole määratud.

Kuid on palju muid võimalusi. Mõnikord kirjeldatakse neid manas liiga segaselt, nii et kogusin siia mõned kasulikumad koos selgitustega.

Märkus. Macidel võib olla vanem bashi versioon (3.x, mitte 4.x), kus kõik need valikud pole saadaval. Sel juhul vt siin või siin.

set või shopt?

Bashi suvandite määramiseks on kaks võimalust: skriptist või käsurealt. Saate kasutada sisseehitatud käske set и shopt. Mõlemad muudavad kesta käitumist, teevad palju sama asja (erinevate argumentidega), kuid erinevad nende poolest päritolu... Valikud set on päritud või laenatud teiste kestade parameetritelt, samas kui parameetrid shopt loodud bashis.

Kui soovite näha praeguseid valikuid, käivitage:

$ set -o
$ shopt

Valiku aktiveerimiseks sisse set Kasutatakse pikka või lühikest süntaksit:

$ set -o errunset
$ set -e

Mõju on sama.

Selle valiku keelamiseks peate miinuse asemel lisama plussi:

$ set +e

Pikka aega ei suutnud ma seda süntaksit meeles pidada, sest loogika tundus vale (miinusmärk lubab selle valiku ja plussmärk keelab selle).

В shopt (loogilisemaid) lippe kasutatakse valikute lubamiseks ja keelamiseks -s (komplekt) ja -u (määramata):

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

Kataloogide muutmine

Kataloogidega töötamisel on mitu võimalust.

1.cdspell

Selle sätte korral hakkab bash mõistma kirjavigu ja suunab teid kausta, mille nime kirjutasite valesti.

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

Olen seda võimalust kasutanud juba aastaid ja väga harva (võib-olla kord aastas) teeb see väga kummalise otsuse. Aga teistel päevadel cdspell säästab aega, sõna otseses mõttes iga päev.

2. autocd

Kui te ei soovi leppida mitme kirje ebaefektiivsusega cd, siis saate määrata selle suvandi nii, et see liiguks X-kausta, kui X-käsku pole olemas.

$ shopt -s autocd
$ abcdefg
$ cd ..

Koos automaatse täitmisega võimaldab see kiiresti kaustade vahel liikuda.

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

Lihtsalt ärge pange kaustale nime rm -rf * (jah, muide, see on võimalik).

3.direxpand

See on lahe valik, mis laiendab keskkonnamuutujaid, vajutades tabeldusklahvi:

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

puhas väljund

4. kontrolltööd

See suvand peatab seansist väljalogimise, kui taustal töötab endiselt töid.

Väljumise asemel kuvatakse lõpetamata ülesannete loend. Kui soovite siiski väljuda, sisestage uuesti 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 процесса  изменился

Asenduse supervõimed

5.globstar

See valik annab teile asendamise supervõimed! Kui sisestate:

$ shopt -s globstar
$ ls **

siis näitab kest kõiki katalooge ja alamkatalooge rekursiivselt.

Kombineeritult koos direxpand Saate kiiresti vaadata kõike hierarhias madalamat.

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

6.extglob

See suvand lubab funktsioone, mida sagedamini seostatakse regulaaravaldistega. Mõnikord on see väga kasulik:

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

Siin asetatakse mustrid sulgudesse ja eraldatakse vertikaalse ribaga. Siin on saadaolevad operaatorid:

? = vastab antud mustrite nullile või ühele esinemisele! = näita kõike, mis ei vasta antud mustritele * = null või enam esinemist + = üks või mitu esinemist @ = täpselt üks esinemine

Õnnetuskaitse

7. histverify

Lühendite ajaloost pärit kiirkäivituskäskude kasutamine võib alguses pisut hirmutav olla !! и !$.

Variant histverify võimaldab teil kõigepealt näha, kuidas Bash käsku tõlgendab, enne kui see tegelikult töötab:

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

8. Noklobber

Jällegi kaitseks õnnetuste eest, nimelt ümbersuunamisoperaatoriga juba olemasoleva faili ülekirjutamise eest (>). Kui teil pole varukoopiat, võib see olla katastroof.

Variant set -С keelab sellise ülekirjutamise. Vajadusel saate operaatori abil kaitsest mööda minna >|:

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

Allikas: www.habr.com

Lisa kommentaar