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
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 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