Opt Opțiuni Bash puțin cunoscute

Unele opțiuni Bash sunt bine cunoscute și adesea folosite. De exemplu, mulți oameni scriu la începutul scenariului

set -o xtrace

pentru depanare,

set -o ridicat

a ieși din greșeală sau

set -o errunset

pentru a ieși dacă variabila apelată nu este setată.

Dar există multe alte opțiuni. Uneori sunt descrise prea confuz în manas, așa că am adunat aici câteva dintre cele mai utile, cu explicații.

Notă: Mac-urile pot avea o versiune mai veche de bash (3.x în loc de 4.x) în care nu toate aceste opțiuni sunt disponibile. În acest caz, vezi aici sau aici.

set sau shopt?

Există două moduri de a seta opțiunile bash: dintr-un script sau din linia de comandă. Puteți utiliza comenzi încorporate set и shopt. Ambele schimbă comportamentul shell-ului, fac aproape același lucru (cu argumente diferite), dar diferă în ceea ce privește origine... Opțiuni set sunt moștenite sau împrumutate de la parametrii altor shell-uri, în timp ce parametrii shopt creat în bash.

Dacă doriți să vedeți opțiunile curente, rulați:

$ set -o
$ shopt

Pentru a activa opțiunea în set Se folosește sintaxa lungă sau scurtă:

$ set -o errunset
$ set -e

Efectul este același.

Pentru a dezactiva opțiunea, trebuie să puneți un plus în loc de un minus:

$ set +e

Multă vreme nu mi-am putut aminti această sintaxă pentru că logica părea greșită (un semn minus activează opțiunea, iar un semn plus o dezactivează).

В shopt (mai logice) steaguri sunt folosite pentru a activa și dezactiva opțiunile -s (set) și -u (dezactivat):

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

Schimbarea directoarelor

Există mai multe opțiuni care vă ajută să lucrați cu directoare.

1.cdspell

Cu această setare, bash va începe să înțeleagă greșelile de scriere și vă va duce la folderul al cărui nume l-ați scris greșit.

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

Folosesc această opțiune de mulți ani și foarte rar (poate o dată pe an) ia o decizie foarte ciudată. Dar în alte zile cdspell economisește timp, literalmente în fiecare zi.

2. autocd

Dacă nu sunteți dispus să acceptați ineficiența mai multor intrări cd, atunci puteți seta această opțiune pentru a muta în folderul X dacă comanda X nu există.

$ shopt -s autocd
$ abcdefg
$ cd ..

În combinație cu completarea automată, acest lucru vă permite să săriți rapid între dosare:

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

Doar nu denumește folderul rm -rf * (da, apropo, acest lucru este posibil).

3.directexpand

Aceasta este o opțiune grozavă care extinde variabilele de mediu apăsând Tab:

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

ieșire curată

4. joburi de verificare

Această opțiune oprește deconectarea din sesiune dacă mai există joburi care rulează în fundal.

În loc să ieșiți, este afișată o listă de sarcini neterminate. Dacă tot doriți să ieșiți, apoi intrați din nou 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 процесса  изменился

Superputeri de substituție

5.globstar

Această opțiune vă oferă superputeri de înlocuire! Daca intri:

$ shopt -s globstar
$ ls **

apoi shell-ul va afișa toate directoarele și subdirectoarele în mod recursiv.

В сочетании с direxpand Puteți vizualiza rapid tot ce este mai jos în ierarhie:

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

6.extglob

Această opțiune activează caracteristicile care sunt asociate mai frecvent cu expresiile regulate. Uneori, acest lucru este foarte util:

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

Aici modelele sunt plasate în paranteze și separate printr-o bară verticală. Iată operatorii disponibili:

? = se potrivește cu zero sau o apariție a modelelor date! = arată tot ceea ce nu se potrivește cu modelele date * = zero sau mai multe apariții + = una sau mai multe apariții @ = exact o apariție

Protecție împotriva accidentelor

7. histverify

Poate fi puțin înfricoșător la început să folosești comenzile de lansare rapidă din istoricul abrevierilor !! и !$.

Opțiune histverify vă permite să vedeți mai întâi cum interpretează Bash comanda înainte de a rula efectiv:

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

8. Noclobber

Din nou, pentru a proteja împotriva accidentelor, și anume de la suprascrierea unui fișier care există deja cu operatorul de redirecționare (>). Acest lucru poate fi un dezastru dacă nu aveți o copie de rezervă.

Opțiune set -С interzice o astfel de suprascriere. Dacă este necesar, puteți ocoli protecția folosind operatorul >|:

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

Sursa: www.habr.com

Adauga un comentariu