Unele opțiuni Bash sunt bine cunoscute și folosite frecvent. De exemplu, mulți încep scriptul cu
set -o xtrace
pentru depanare,
set -o errexit
pentru a ieși în caz de eroare sau
set -o errunset
pentru a ieși dacă variabila apelată nu este setată.
Dar există multe alte opțiuni. Uneori, ele sunt descrise confuz în manuale, așa că am adunat aici unele dintre cele mai utile, cu explicații.
Notă: pe Mac poate fi o versiune mai veche de bash (3.x, nu 4.x), unde nu toate aceste opțiuni sunt disponibile. În acest caz, consultați sau .
set sau shopt?
Există două moduri de a seta opțiunile bash: din script sau din linia de comandă. Puteți folosi comenzi integrate set și shopt. Ambele schimbă comportamentul shell-ului, fac în mare parte același lucru (cu argumente diferite) și se deosebesc prin . Opțiunile set sunt moștenite sau împrumutate din opțiunile altor shell-uri, în timp ce opțiunile shopt sunt create în bash.
Dacă doriți să vedeți opțiunile curente, rulați:
$ set -o
$ shopt Pentru a activa o opțiune în set se folosește sintaxa lungă sau scurtă:
$ set -o errunset
$ set -eEfecul este același.
Pentru a dezactiva o opțiune, trebuie să puneți un plus în loc de minus:
$ set +eO perioadă lungă de timp nu am putut să-mi amintesc această sintaxă, deoarece logica pare greșită (minusul activează opțiunea, iar plusul — dezactivează).
În shopt pentru activarea și dezactivarea opțiunilor se folosesc (mai logice) flag-uri -s (set) și -u (unset):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= offSchimbarea directoarelor
Există câteva opțiuni care ajută la lucrul cu directoarele.
1. cdspell
Cu această setare, bash va începe să înțeleagă greșelile de tipar și te va muta în folderul al cărui nume l-ai scris greșit.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd .. Am folosit această opțiune ani de zile, și foarte rar (poate o dată pe an) ia o decizie foarte ciudată. Dar în restul zilelor cdspell îmi economisește timp, practic în fiecare zi.
2. autocd
Dacă nu ești pregătit să toleri ineficiența introducerii repetate cd, atunci poți activa această opțiune pentru a te muta în folderul X, dacă comanda X nu există.
$ shopt -s autocd
$ abcdefg
$ cd ..Împreună cu completarea automată, aceasta permite să sari rapid între foldere:
$ .\/abc[TAB][RETURN]
cd -- .\/abcdefg Numai să nu numești folderul rm -rf * (da, de altfel, este posibil).
3. direxpand
Aceasta este o opțiune grozavă, care extinde variabilele de mediu cu apăsarea tastei Tab:
$ shopt -s direxpand
$ .\/[TAB] # se transformă în...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB] # se transformă în...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] # se transformă în...
$ \/full\/path\/to\/home\/folderIeșire curată
4. checkjobs
Această setare oprește ieșirea din sesiune dacă în fundal încă rulează sarcini.
În loc de ieșire, se va afișa o listă a sarcinilor nefinalizate. Dacă vrei să ieși totuși, introduce din nou exit.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID-ul procesului pentru shell
$ sleep 999 &
$ exit
Există sarcini care rulează.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID-ul procesului pentru shell este același
$ exit
Există sarcini care rulează.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= de data aceasta ID-ul procesului s-a schimbatSuperputeri pentru substituție
5. globstar
Această opțiune îți oferă superputeri pentru substituție! Dacă introduci:
$ shopt -s globstar
$ ls **atunci shell-ul va afișa recursiv toate directoarele și subdirectoarele.
Împreună cu direxpand poți naviga rapid prin tot ce este mai jos în ierarhie:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Afișați toate cele 2033 de posibilități? (y sau n) 6. extglob
Această opțiune activează funcții care sunt adesea asociate cu expresii 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*)
cfileAici, tiparele sunt plasate între paranteze și separate printr-o bară verticală. Iată operatorii disponibili:
? = соответствует нулю или одному вхождению заданных шаблонов ! = показать всё, что не соответствует заданным шаблонам * = ноль или более вхождений + = одно или более вхождений @ = ровно одно вхождение
Protecție împotriva accidentelor
7. histverify
La început poate fi puțin intimidant să folosești comenzile rapide din istoric pentru ordonarea rapidă a comenzilor !! și !$.
Opțiune histverify îți permite să vezi mai întâi cum interpretează Bash comanda, înainte ca aceasta să fie efectiv executată:
$ shopt -s histverify
$ echo !$ # <= Apăsând Enter, comanda nu se execută
$ echo histverify # <= Aceasta este mai întâi afișată pe ecran,
histverify # <= și apoi este executată 8. Noclobber
Din nou, pentru protecția împotriva accidentelor, și anume împotriva scrierii peste un fișier care există deja cu operatorul de redirecționare (>). Acest lucru poate deveni catastrofal dacă nu ai o copie de rezervă.
Opțiune set -C interzice această suprascriere. Dacă este necesar, protecția poate fi ocolită cu operatorul >|:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$Sursa: habr.com
