Բաշի քիչ հայտնի ութ տարբերակ

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

Добавить комментарий