Tetë opsione pak të njohura të Bash

Disa opsione të Bash-it janë mjaft të njohura dhe shpesh përdoren. Për shembull, shumë në fillim të skriptit shkruajnë

set -o xtrace

për debuggim,

set -o errexit

për të dalë në rast gabimi ose

set -o errunset

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

Por ka shumë opsione të tjera. Ndonjëherë ato përshkruhen mjaft ngatërrues në man pages, 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 të gjitha këto opsione janë 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-it: nga skripti ose nga linja e komandës. Mund të përdoren komandat e ndërtuara set dhe shopt. Të dyja ndryshojnë sjelljen e shell-it, bëjnë në masë të madhe të njëjtën gjë (me argumente të ndryshme), dhe dallohen nga origjina. Parametrat set trashëgohen ose huazohen nga parametrat e shell-ëve të tjerë, ndërsa parametrat shopt janë krijuar në bash.

Nëse dëshironi të shihni opsionet aktuale, ekzekutoni:

$ set -o
$ shopt

Për aktivizimin e një opsioni në set në përdoret sintaksa e gjatë ose e shkurtër:

$ set -o errunset
$ set -e

Efekti është i njëjtë.

Për të çaktivizuar opsionin, duhet të vendosni plus në vend të minusit:

$ set +e

Për një kohë të gjatë nuk mund të mbaja mend këtë sintaksë, pasi logjika duket e gabuar (minus aktivizon opsionin, ndërsa plusi e çaktivizon).

Në shopt për aktivizimin dhe çaktivizimin e opsioneve përdoren (më logjikisht) flamuj -s (set) dhe -u (unset):

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

Ndryshimi i katalogëve

Ka disa opsione që ndihmojnë në punën me katalogët.

1. cdspell

Me këtë cilësim bash do të fillojë të kuptojë gabimet dhe do t'ju çojë në folderin, emri i të cilit e keni shkruar gabim.

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

E kam përdorur këtë opsion për shumë vite, dhe shumë rrallë (ndoshta një herë në vit) ai merr një vendim shumë të çuditshëm. Por gjatë ditëve të tjera cdspell kursen kohë, literal çdo ditë.

2. autocd

Nëse nuk jeni gati të toleroni efikasitetin e shumfish të hyrjes cd, mund të vendosni këtë opsion për të lëvizur në folderin X, nëse komanda X nuk ekziston.

$ shopt -s autocd
$ abcdefg
$ cd ..

Në kombinim me autocomplete, kjo lejon të skakoni shpejt nëpër katalogë:

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

Vetëm mos e quani folderin rm -rf * (po, përndryshe, është e mundur).

3. direxpand

Kjo është një opsion super që zgjeron variablat e mjedisit me një prekje të 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

Dalja e pastër

4. checkjobs

Këto parametra ndalojnë daljen nga seanca nëse ka punë që po ekzekutohen në sfond.

Në vend të daljes, do të shfaqet një listë e punëve të papërfunduara. Nëse dëshiron të dalësh për një herë të dytë, shkruaj exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID procesi për shell-in
$ sleep 999 &
$ exit
Ka punë që po ekzekutohen.
[1]+  Duke u Ekzekutuar                 sleep 999 &
$ echo $$
68125             # <= ID procesi për shell-in i njëjtë
$ exit
Ka punë që po ekzekutohen.
[1]+  Duke u Ekzekutuar                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= këtë herë ID procesi ka ndryshuar

Superfuqitë e zëvendësimit

5. globstar

Kjo opsion jep superfuqi për zëvendësimin! Nëse shkruan:

$ shopt -s globstar
$ ls **

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

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

$ shopt -s direxpand
$ ls **[TAB][TAB]
A e shfaqim të gjitha 2033 mundësi? (po ose jo) 

6. extglob

Ky opsion aktivizon funksione që shpesh lidhen me shprehjet e rregullta. Ndonjëherë kjo ë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, skemat vendosen në dhe janë të ndara me shenjë vertikale.

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

Mbrojtja nga fatkeqësitë

7. histverify

Në fillim mund të duket pak e frikshme të përdorësh shpejtësinë e komandave nga historia me skuterin !! dhe !$.

Opcioni histverify lejon të shikosh fillimisht se si Bash interpreton komandën, para se të ekzekutohet në të vërtetë:

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

8. Noclobber

Përsëri, për të mbrojtur nga fatkeqësitë, sidomos nga zëvendësimi i një dosjeje që tashmë ekziston me operatorin e redirektimit (>). Kjo mund të bëhet katastrofike, nëse nuk ke një kopje rezervë.

Opcioni set -C ndalon një zëvendësim të tillë. Në rast nevoje, mbrojtjen mund të anashkalosh me operatorin >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: nuk mund të mbivendosë dosjen ekzistuese
$ echo something >| afile
$

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster