Aacht Little-Bekannt Bash Optiounen

E puer Bash Optiounen si bekannt an dacks benotzt. Zum Beispill schreiwen vill Leit am Ufank vum Skript

astellen -o xtrace

fir Debugging,

set -o errexit

per Feeler eraus ze goen oder

set -o errunset

fir erauszekommen wann déi genannte Variabel net agestallt ass.

Mä et gi vill aner Optiounen. Heiansdo gi se ze verwirrend a Manas beschriwwen, also hunn ech e puer vun den nëtzlechsten hei gesammelt, mat Erklärung.

Notiz: Macs kënnen eng méi al Versioun vu Bash hunn (3.x anstatt 4.x) wou net all dës Optiounen verfügbar sinn. An dësem Fall, kuckt hei oder hei.

set oder shopt?

Et ginn zwou Méiglechkeeten fir Bash Optiounen ze setzen: vun engem Skript oder vun der Kommandozeil. Dir kënnt agebaute Kommandoen benotzen set и shopt. Béid änneren d'Behuele vun der Schuel, maachen vill déiselwecht Saach (mat verschiddenen Argumenter), awer ënnerscheede sech an hirer Urspronk... Optiounen set sinn ierflecher oder aus Parameteren vun anere Muschelen geléint, iwwerdeems Parameteren shopt am Bash erstallt.

Wann Dir déi aktuell Optiounen wëllt gesinn, lafen:

$ set -o
$ shopt

Fir d'Optioun aktivéieren an set Laang oder kuerz Syntax gëtt benotzt:

$ set -o errunset
$ set -e

Den Effekt ass d'selwecht.

Fir d'Optioun auszeschalten, musst Dir e Plus anstatt e Minus setzen:

$ set +e

Fir eng laang Zäit konnt ech dës Syntax net erënneren, well d'Logik falsch ausgesäit (e Minuszeechen erlaabt d'Optioun, an e Plus Zeechen deaktivéiert se).

В shopt (méi logesch) Fändelen gi benotzt fir Optiounen z'aktivéieren an auszeschalten -s (set) an -u (unset):

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

Verzeechnes änneren

Et gi verschidde Méiglechkeeten, déi Iech hëllefen mat Verzeechnes ze schaffen.

1.cdspell

Mat dëser Astellung fänkt de Bash un Tippfehler ze verstoen a bréngt Iech an den Dossier deem säin Numm Dir falsch geschriwwe hutt.

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

Ech hunn dës Optioun fir vill Joer benotzt a ganz selten (vläicht eemol am Joer) mécht et eng ganz komesch Entscheedung. Awer op aneren Deeg cdspell spuert Zäit, wuertwiertlech all Dag.

2. autocd

Wann Dir net gewëllt sidd d'Ineffizienz vu multiple Entréen ze akzeptéieren cd, da kënnt Dir dës Optioun setzen fir an den X Dossier ze plënneren wann de X Kommando net existéiert.

$ shopt -s autocd
$ abcdefg
$ cd ..

Kombinéiert mat Autocomplete, erlaabt dëst Iech séier tëscht Ordner ze sprangen:

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

Nennt just den Dossier net rm -rf * (jo, iwwregens, dat ass méiglech).

3.direxpand

Dëst ass eng cool Optioun déi Ëmfeldvariablen erweidert andeems Dir Tab dréckt:

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

propper Ausgang

4. checkjobs

Dës Optioun stoppt aus der Sessioun ausloggen wann et nach Aarbechtsplazen am Hannergrond lafen.

Amplaz auszegoen, gëtt eng Lëscht vun ongeschlossen Aufgaben ugewisen. Wann Dir nach ëmmer wëllt erausgoen, gitt nach eng Kéier an 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 процесса  изменился

Substitutioun Supermuecht

5.globstar

Dës Optioun gëtt Iech Substitutioun Supermuecht! Wann Dir gitt:

$ shopt -s globstar
$ ls **

da wäert d'Shell all Verzeichnungen an Ënnerverzeechnungen rekursiv weisen.

A Verbindung mat direxpand Dir kënnt séier alles méi niddereg an der Hierarchie gesinn:

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

6.extglob

Dës Optioun erlaabt Features déi méi allgemeng mat reguläre Ausdréck verbonne sinn. Heiansdo ass dëst ganz nëtzlech:

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

Hei sinn d'Muster an Klammeren plazéiert an duerch eng vertikal Bar getrennt. Hei sinn déi verfügbar Betreiber:

? = entsprécht Null oder engem Optriede vun de gegebene Mustere
! = weisen alles wat net mat de gegebene Mustere passt
* = Null oder méi Optriede
+ = een oder méi Optriede
@ = genee een Optriede

Accident Schutz

7. histverify

Et kann am Ufank e bëssen grujeleg sinn fir d'Schnellstartbefehl aus der Geschicht vun Ofkierzungen ze benotzen !! и !$.

Optioun histverify léisst Iech als éischt gesinn wéi Bash de Kommando interpretéiert ier et tatsächlech leeft:

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

8. Noklobber

Nach eng Kéier, fir géint Accidenter ze schützen, nämlech fir eng Datei ze iwwerschreiwe déi scho mam Viruleedungsoperateur existéiert (>). Dëst kann eng Katastroph sinn wann Dir kee Backup hutt.

Optioun set -С verbitt esou Iwwerschreiwe. Wann néideg, kënnt Dir de Schutz mam Bedreiwer ëmgoen >|:

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

Source: will.com

Setzt e Commentaire