Acht Little-Known Bash opsjes

Guon Bash-opsjes binne bekend en faak brûkt. Bygelyks, in protte minsken skriuwe oan it begjin fan it skript

set -o xtrace

foar debuggen,

set -o ferhege

om út te gean by fersin of

set -o errunset

om út te gean as de neamde fariabele net ynsteld is.

Mar d'r binne in protte oare opsjes. Soms wurde se te betiizjend beskreaun yn manas, dus ik haw hjir guon fan 'e nuttichste sammele, mei útlis.

Opmerking: Mac's kinne in âldere ferzje fan bash hawwe (3.x ynstee fan 4.x) wêr't net al dizze opsjes beskikber binne. Yn dit gefal, sjoch hjir of hjir.

set of shopt?

D'r binne twa manieren om bash-opsjes yn te stellen: fan in skript of fan 'e kommandorigel. Jo kinne ynboude kommando's brûke set и shopt. Beide feroarje it gedrach fan 'e shell, dogge in protte itselde ding (mei ferskillende arguminten), mar ferskille yn har oarsprong... Opsjes set wurde erfd of liend fan parameters fan oare skelpen, wylst parameters shopt makke yn bash.

As jo ​​​​de hjoeddeistige opsjes sjen wolle, rinne dan:

$ set -o
$ shopt

Om de opsje te aktivearjen yn set Lange of koarte syntaksis wurdt brûkt:

$ set -o errunset
$ set -e

It effekt is itselde.

Om de opsje út te skeakeljen, moatte jo in plus pleatse ynstee fan in minus:

$ set +e

Foar in lange tiid koe ik dizze syntaksis net ûnthâlde, om't de logika ferkeard like (in minteken makket de opsje mooglik, en in plusteken skeakelet it út).

В shopt (logysker) flaggen wurde brûkt om opsjes yn te skeakeljen en út te skeakeljen -s (set) en -u (net ynsteld):

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

Feroarje mappen

D'r binne ferskate opsjes dy't jo helpe om te wurkjen mei mappen.

1.cdspell

Mei dizze ynstelling sil bash typfouten begjinne te begripen en sil jo nei de map wêrfan jo de namme jo hawwe stavere.

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

Ik haw dizze opsje in protte jierren brûkt en heul komselden (miskien ien kear yn 't jier) makket it in heul nuvere beslút. Mar op oare dagen cdspell besparret tiid, letterlik alle dagen.

2. autocd

As jo ​​​​net ree binne om de ineffisjinsje fan meardere yngongen te akseptearjen cd, dan kinne jo dizze opsje ynstelle om nei de X-map te gean as it X-kommando net bestiet.

$ shopt -s autocd
$ abcdefg
$ cd ..

Yn kombinaasje mei autofolje kinne jo fluch tusken mappen springe:

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

Neam de map gewoan net rm -rf * (ja, trouwens, dit is mooglik).

3.direxpand

Dit is in koele opsje dy't omjouwingsfariabelen útwreidet troch op Tab te drukken:

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

skjinne útfier

4. checkjobs

Dizze opsje stopt it útloggen fan 'e sesje as d'r noch banen op 'e eftergrûn rinne.

Ynstee fan útgean, wurdt in list mei net foltôge taken werjûn. As jo ​​​​noch ôfslute wolle, gean dan opnij yn 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 процесса  изменился

Substitute supermachten

5.globstar

Dizze opsje jout jo substitút superpowers! As jo ​​ynfiere:

$ shopt -s globstar
$ ls **

dan sil de shell alle mappen en submappen rekursyf sjen litte.

Yn gearhing mei direxpand Jo kinne alles wat leger yn 'e hiërargy sjen litte:

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

6.extglob

Dizze opsje makket funksjes mooglik dy't faker ferbûn binne mei reguliere útdrukkingen. Soms is dit heul nuttich:

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

Hjir binne de patroanen tusken heakjes pleatst en skieden troch in fertikale balke. Hjir binne de beskikbere operators:

? = komt oerien mei nul of ien foarkommen fan de opjûne patroanen
! = lit alles sjen dat net oerienkomt mei de opjûne patroanen
* = nul of mear foarfallen
+ = ien of mear foarfallen
@ = krekt ien foarkommen

Accident beskerming

7. histverify

It kin earst in bytsje eng wêze om de kommando's foar rappe start út 'e skiednis fan ôfkoartings te brûken !! и !$.

Opsje histverify lit jo earst sjen hoe't Bash it kommando ynterpretearret foardat it eins rint:

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

8. Noklobber

Nochris, om te beskermjen tsjin ûngemakken, nammentlik fan it oerskriuwen fan in bestân dat al bestiet mei de trochferwizingsoperator (>). Dit kin in ramp wêze as jo gjin reservekopy hawwe.

Opsje set -С ferbiedt sa'n oerskriuwen. As it nedich is, kinne jo bypass de beskerming mei help fan de operator >|:

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

Boarne: www.habr.com

Add a comment