Bash-ի որոշ տարբերակներ հայտնի են և հաճախ օգտագործվում: Օրինակ, շատերը գրում են սցենարի սկզբում
սահմանել -o xtrace
վրիպազերծման համար,
սահմանել -o errexit
սխալմամբ դուրս գալ կամ
set -o errunset
դուրս գալ, եթե կանչված փոփոխականը սահմանված չէ:
Բայց կան շատ այլ տարբերակներ: Երբեմն դրանք չափազանց շփոթեցնող են նկարագրվում մանասներում, ուստի ես այստեղ հավաքել եմ ամենաօգտակարներից մի քանիսը` բացատրություններով:
Նշում. Mac-երը կարող են ունենալ bash-ի ավելի հին տարբերակ (3.x, քան 4.x), որտեղ այս տարբերակներից ոչ բոլորն են հասանելի: Այս դեպքում տե՛ս
set
կամ shopt
?
Bash տարբերակները սահմանելու երկու եղանակ կա՝ սկրիպտից կամ հրամանի տողից: Դուք կարող եք օգտագործել ներկառուցված հրամաններ set
и shopt
. Երկուսն էլ փոխում են կեղևի վարքագիծը, անում են մոտավորապես նույն բանը (տարբեր փաստարկներով), բայց տարբերվում են իրենցով set
ժառանգված կամ փոխառված են այլ պատյանների պարամետրերից, մինչդեռ պարամետրերը shopt
ստեղծված բաշում։
Եթե ցանկանում եք տեսնել ընթացիկ տարբերակները, գործարկեք՝
$ set -o
$ shopt
Ընտրանքն ակտիվացնելու համար set
Օգտագործվում է երկար կամ կարճ շարահյուսություն.
$ set -o errunset
$ set -e
Էֆեկտը նույնն է.
Ընտրանքն անջատելու համար մինուսի փոխարեն պետք է գումարած դնել.
$ set +e
Երկար ժամանակ ես չէի կարողանում հիշել այս շարահյուսությունը, քանի որ տրամաբանությունը սխալ էր թվում (մինուս նշանը հնարավորություն է տալիս տարբերակը, իսկ գումարած նշանը անջատում է այն):
В shopt
(ավելի տրամաբանական) դրոշներն օգտագործվում են ընտրանքները միացնելու և անջատելու համար -s
(հավաքածու) և -u
(չսահմանված):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Գրացուցակների փոփոխություն
Կան մի քանի տարբերակներ, որոնք օգնում են ձեզ աշխատել դիրեկտորիաների հետ:
1.cdspell
Այս պարամետրով bash-ը կսկսի հասկանալ տառասխալները և ձեզ կտանի այն թղթապանակը, որի անունը սխալ եք գրել:
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Ես երկար տարիներ օգտագործում եմ այս տարբերակը և շատ հազվադեպ (գուցե տարին մեկ անգամ) այն շատ տարօրինակ որոշում է կայացնում: Բայց մյուս օրերին cdspell
խնայում է ժամանակը, բառացիորեն ամեն օր:
2. ավտոմատ
Եթե դուք չեք ցանկանում ընդունել բազմաթիվ գրառումների անարդյունավետությունը cd
, ապա կարող եք սահմանել այս տարբերակը, որպեսզի տեղափոխվի X թղթապանակ, եթե X հրամանը գոյություն չունի:
$ shopt -s autocd
$ abcdefg
$ cd ..
Համակցված ավտոմատ լրացման հետ՝ սա թույլ է տալիս արագ անցնել թղթապանակների միջև՝
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Պարզապես թղթապանակը մի անվանեք rm -rf *
(այո, ի դեպ, դա հնարավոր է):
3.ուղիղ ընդլայնել
Սա հիանալի տարբերակ է, որն ընդլայնում է շրջակա միջավայրի փոփոխականները՝ սեղմելով Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
Մաքուր արդյունք
4. ստուգման աշխատանքներ
Այս տարբերակը դադարեցնում է նիստից դուրս գալը, եթե հետին պլանում դեռ աշխատատեղեր կան:
Դուրս գալու փոխարեն ցուցադրվում է անավարտ առաջադրանքների ցանկը: Եթե դեռ ցանկանում եք դուրս գալ, ապա նորից մտեք 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 процесса изменился
Փոխարինող գերտերություններ
5.գլոբաստղ
Այս տարբերակը ձեզ տալիս է փոխարինող գերտերություններ: Եթե մուտքագրեք.
$ shopt -s globstar
$ ls **
ապա կեղևը կցուցադրի բոլոր դիրեկտորիաներն ու ենթագրքերները ռեկուրսիվ կերպով:
Հետ միասին direxpand
Դուք կարող եք արագ դիտել ամեն ինչ ավելի ցածր հիերարխիայում.
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Այս տարբերակը հնարավորություն է տալիս գործառույթներ, որոնք ավելի հաճախ կապված են կանոնավոր արտահայտությունների հետ: Երբեմն սա շատ օգտակար է.
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Այստեղ նախշերը տեղադրվում են փակագծերում և բաժանվում են ուղղահայաց բարով։ Ահա հասանելի օպերատորները.
? = համապատասխանում է տրված օրինաչափությունների զրոյին կամ մեկին: = ցույց տալ այն ամենը, ինչը չի համապատասխանում տրված օրինաչափություններին * = զրո կամ ավելի դեպքեր + = մեկ կամ մի քանի երևույթ @ = ճիշտ մեկ երևույթ
Դժբախտ պատահարներից պաշտպանություն
7. histverify
Սկզբում կարող է մի փոքր սարսափելի լինել հապավումների պատմության արագ գործարկման հրամանների օգտագործումը !!
и !$
.
Տարբերակ histverify
թույլ է տալիս նախ տեսնել, թե ինչպես է Bash-ը մեկնաբանում հրամանը, մինչև այն իրականում գործարկվի.
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Նոկլոբեր
Կրկին, վթարներից պաշտպանվելու համար, մասնավորապես վերահղման օպերատորի հետ արդեն գոյություն ունեցող ֆայլի վերագրանցումից (>
) Սա կարող է աղետ լինել, եթե դուք չունեք կրկնօրինակում:
Տարբերակ set -С
արգելում է նման վերագրանցումը: Անհրաժեշտության դեպքում դուք կարող եք շրջանցել պաշտպանությունը օպերատորի միջոցով >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Source: www.habr.com