Ҳашт варианти каме маълуми Баш

Баъзе вариантҳои Bash хуб маълуманд ва аксар вақт истифода мешаванд. Масалан, бисёр одамон дар аввали сенария менависанд

муқаррар -o xtrace

барои ислоҳ,

муқаррар -o errexit

ба хато баромадан ё

set -o хато

барои баромадан, агар тағирёбандаи даъватшуда муқаррар карда нашавад.

Аммо бисёр вариантҳои дигар вуҷуд доранд. Баъзан онҳо дар манас хеле печида тасвир шудаанд, бинобар ин ман баъзе аз муфидтаринҳоро дар ин ҷо бо шарҳ ҷамъ овардам.

Эзоҳ: Macҳо метавонанд версияи кӯҳнаи bash дошта бошанд (3.x, на 4.x), ки дар он ҷо на ҳамаи ин интихобҳо дастрасанд. Дар ин ҳолат, нигаред дар ин ҷо ё дар ин ҷо.

set ё shopt?

Ду роҳи танзим кардани имконоти bash вуҷуд дорад: аз скрипт ё аз сатри фармон. Шумо метавонед фармонҳои дарунсохтро истифода баред set и shopt. Ҳарду рафтори ҷабҳаро тағир медиҳанд, тақрибан як чизро иҷро мекунанд (бо далелҳои гуногун), аммо аз ҷиҳати онҳо фарқ мекунанд пайдоиш... Имконот set аз параметрҳои снарядҳои дигар мерос ё қарз гирифта мешаванд, дар ҳоле ки параметрҳо shopt дар bash сохта шудааст.

Агар шумо хоҳед, ки имконоти ҷорӣро бинед, иҷро кунед:

$ 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. autocd

Агар шумо омода набошед, ки бесамар будани сабтҳои сершуморро қабул кунед 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.globstar

Ин хосият ба шумо қудрати супервазниро медиҳад! Агар шумо ворид кунед:

$ 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 ба шумо имкон медиҳад, ки аввал бубинед, ки чӣ тавр 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
$

Манбаъ: will.com

Илова Эзоҳ