Tetë opsione të panjohura të Bash

Disa disa më të njohura të Bash janë të njohura dhe shpesh përdoren. Për shembull, shumë fillojnë skriptin me

set -o xtrace

për debuggim,

set -o errexit

për daljen në mënyrë të gabuar ose

set -o errunset

për daljen, nëse variabla e thirrur nuk është e vendosur.

Por ka shumë mundësi të tjera. Ndonjëherë ato përshkruhen shumë ngatërruar në man, prandaj kam mbledhur këtu disa nga më të dobishmet, me shpjegim.

Shënim: në Mac mund të ketë një version më të vjetër të bash (3.x, jo 4.x), ku nuk janë të gjitha këto mundësi të disponueshme. Në këtë rast shihni këtu ose këtu.

set ose shopt?

Ka dy mënyra për të vendosur parametrat e bash: nga skripti ose nga linja e komandës. Mund të përdorni komanda të ndërtuara set dhe shopt. Të dyja ndryshojnë sjelljen e shell-it, bëjnë pothuajse të njëjtën gjë (me argumente të ndryshme), dhe dallohen nga origjina. Parametrat set trashëgohen ose huazohen nga parametrat e shell-eve të tjera, ndërsa parametrat shopt janë krijuar në bash.

Nëse dëshironi të shihni mundësitë aktuale, ekzekutoni:

$ set -o
$ shopt

Për të aktivizuar një mundësi në set përdor syntaksin e gjatë ose të shkurtër:

$ set -o errunset
$ set -e

Efekti është i njëjtë.

Për të çaktivizuar mundësinë, duhet të vendosni një plus në vend të një minus:

$ set +e

Për një kohë të gjatë nuk mund t'i mbaja mend këto sintaksa, pasi logjika duket e papërshtatshme (minus aktivizon mundësinë, dhe plusi e çaktivizon).

shopt për aktivizimin dhe çaktivizimin e mundësive përdoren (më të logjikshme) flamuj -s (set) dhe -u (unset):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Ndryshimi i katalogëve

Ka disa mundësi që ndihmojnë për të punuar me katalogët.

1. cdspell

Me këtë konfigurim, bash do të fillojë të kuptojë gabimet dhe do t'ju çojë në dosjen që keni shkruar gabim.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

Kam përdorur këtë mundësi për shumë vite, dhe shumë rrallë (ndoshta një herë në vit) ajo merr një vendim shumë të çuditshëm. Por në ditët e tjera cdspell kursen kohë, pothuajse çdo ditë.

2. autocd

Nëse nuk jeni të gatshëm të pranoni pafuqishmërinë e shkruar disa herë cd, mund të vendosni këtë mundësi për të kaluar në dosjen X, nëse komanda X nuk ekziston.

$ shopt -s autocd
$ abcdefg
$ cd ..

Në kombinim me autocompletion, kjo lejon të kalosh shpejt nëpër katalogë:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Vetëm mos e quani dosjen rm -rf * (po, përshëndetje, kjo është e mundur).

3. direxpand

Kjo është një mundësi e shkëlqyer, e cila zgjerohet variablat e mjedisit përmes shtypjes së Tab:

$ shopt -s direxpand
$ ./[TAB]     # zëvendësohet me...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # zëvendësohet me...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  zëvendësohet me...
$ /full/path/to/home/folder

Dali i pastër

4. checkjobs

Ky parametr ndalon daljen nga seanca, nëse ka ende detyra që kryhen në sfond.

Në vend të daljes është një listë e detyrave të papërfunduara. Nëse ende dëshironi të dilni, shkruani përsëri exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID e procesit për shell
$ sleep 999 &
$ exit
Ka detyra që po kryhen.
[1]+  Po kryhet                 sleep 999 &
$ echo $$
68125             # <= ID e procesit për shell të njëjtë
$ exit
Ka detyra që po kryhen.
[1]+  Po kryhet                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= këtë herë ID e procesit ndryshoi

Superfuqit e zëvendësimit

5. globstar

Kjo mundësi t'ju japë superfuqi për përputhshmëri! Nëse shkruani:

$ shopt -s globstar
$ ls **

atëherë shell-i do të tregojë të gjitha katalogët dhe nënkatalogët në mënyrë rekursive.

Në kombinim me direxpand mund të shfletoni shpejt gjithçka që është poshtë në hierarki:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Tregon të gjitha 2033 mundësitë? (y ose n) 

6. extglob

Kjo mundësi aktivizon funksione që shpesh lidhen me shprehjet e rregullta. Ndonjëherë është shumë e dobishme:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Këtu shabllonet vendosen në kllapa dhe ndahen me një vijë të vertikalisht. Ja operatorët e disponueshëm:

? = соответствует нулю или одному вхождению заданных шаблонов
! = показать всё, что не соответствует заданным шаблонам
* = ноль или более вхождений
+ = одно или более вхождений
@ = ровно одно вхождение

Mbrojtja nga aksidentet

7. histverify

Në fillim mund të duket pak frikësuese të përdorësh nisjen e shpejtë të komandeve nga historia me shkurtesa !! dhe !$.

Opcioni histverify lejon së pari të shihni se si bash interpreton komandën, para se të vërtetojë se ajo do të ekzekutohet:

$ shopt -s histverify
$ echo !$          # <= Me shtypjen e Enter, komanda nuk ekzekutohet
$ echo histverify  # <= Ajo shfaqet fillimisht në ekran,
histverify         # <= dhe pastaj ekzekutohet 

8. Noclobber

Edhe një herë, për mbrojtjen nga aksidentet, veçanërisht nga mbishkrimi i një skedari që tashmë ekziston me operatorin e redirektimit (>). Kjo mund të bëhet katastrofike nëse nuk keni një kopje rezervë.

Opcioni set -C ndalon një mbishkrim të tillë. Nëse është e nevojshme, mund të shmangni mbrojtjen me operatorin >|:

$ touch afile
$ set -C
$ echo diçka > afile
-bash: afile: nuk mund të mbishkruaj një skedar ekzistues
$ echo diçka >| afile
$

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster