Osem málo známych možností Bash

Niektoré možnosti Bash sú dobre známe a často používané. Napríklad, mnohí na začiatku skriptu píšu

set -o xtrace

na ladenie,

set -o errexit

na výstup pri chybe alebo

set -o errunset

na výstup, ak je volaná premenná nenastavená.

Ale existuje mnoho ďalších možností. Niekedy sú v manuáloch príliš zmätočne popísané, a preto som ich tu zhromaždil niektoré z najužitočnejších, s vysvetlením.

Poznámka: Na Macu môže byť staršia verzia bash (3.x, nie 4.x), kde nie všetky tieto možnosti sú dostupné. V tomto prípade si pozrite tu alebo tu.

set alebo shopt?

Existujú dva spôsoby nastavenia parametrov bash: zo skriptu alebo z príkazového riadku. Môžete použiť vstavané príkazy set a shopt. Obe menia správanie shellu, robia v mnohých ohľadoch to isté (s rôznymi argumentmi), a líšia sa svojím pôvodom. Parametre set sa dedia alebo preberajú z parametrov iných shellov, zatiaľ čo parametre shopt sú vytvorené v bash.

Ak chcete vidieť aktuálne možnosti, spustite:

$ set -o
$ shopt

Na aktiváciu možnosti v set sa používa dlhá alebo krátka syntaktická forma:

$ set -o errunset
$ set -e

Efekt je rovnaký.

Na deaktiváciu možnosti je potrebné namiesto mínusu dať plus:

$ set +e

Dlho som si nemohol zapamätať túto syntaktickú formu, pretože logika sa zdá nesprávna (mínus aktivuje možnosť, a plus ju deaktivuje).

V shopt na zapínanie a vypínanie možností sa používajú (logickejšie) vlajky -s (set) a -u (unset):

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

Zmena adresárov

Existuje niekoľko možností, ktoré pomáhajú pracovať s adresármi.

1. cdspell

S týmto nastavením bash začne chápať preklepy a presunie vás do priečinka, ktorého názov ste napísali nesprávne.

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

Túto možnosť som používal mnoho rokov, a veľmi zriedka (možno raz ročne) sa rozhodne veľmi podivne. Ale v ostatných dňoch cdspell ušetruje čas doslova každý deň.

2. autocd

Ak nie ste pripravení znášať neefektívnosť opakovaného zadávania cd, môžete nastaviť túto možnosť na presun do priečinka X, ak príkaz X neexistuje.

$ shopt -s autocd
$ abcdefg
$ cd ..

V kombinácii s automatickým dopĺňaním to umožňuje rýchlo skákať medzi priečinkami:

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

Len neoznačte priečinok rm -rf * (áno, mimochodom, to je možné).

3. direxpand

To je skvelá možnosť, ktorá rozširuje premenné prostredia po stlačení Tab:

$ shopt -s direxpand
$ .\/[TAB]     # nahradí se na...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB]     # nahradí se na...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] #  nahradí se na...
$ \/full\/path\/to\/home\/folder

Čistý výstup

4. checkjobs

Tento parametr zastaví odhlášení ze sezení, pokud v pozadí běží ještě další úkoly.

Místo odhlášení se zobrazí seznam neukončených úkolů. Pokud se chcete přesto odhlásit, zadejte znovu exit.

$ shopt -s checkjobs
$ echo $$
68125             #  ID procesu pro shell
$ sleep 999 &
$ exit
Existují běžící úkoly.
[1]+  Běží                 sleep 999 &
$ echo $$
68125             #  ID procesu pro shell je stejné
$ exit
Existují běžící úkoly.
[1]+  Běží                 sleep 999 &
$ exit
$ echo $$
$ 59316           #  tentokrát se ID procesu změnilo

Super schopnosti pro zástupce

5. globstar

Tato možnost vám dává super schopnosti pro zástupce! Pokud zadáte:

$ shopt -s globstar
$ ls **

pak shell zobrazí rekurzivně všechny adresáře a podadresáře.

Ve spojení s direxpand můžete rychle procházet vše, co je níže v hierarchii:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Zobrazit všechny 2033 možnosti? (y nebo n) 

6. extglob

Tato volba aktivuje funkce, které jsou častěji spojovány s regulárními výrazy. Někdy je to velmi užitečné:

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

Zde jsou šablony umístěny do kulatých závorek a odděleny svislou čarou. Tady jsou dostupné operátory:

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

Ochrana před neštěstími

7. histverify

Zpočátku může být trochu strašidelné používat rychlé spuštění příkazů z historie pomocí zkratek !! a !$.

Možnosť histverify umožňuje nejprve vidět, jak Bash interpretuje příkaz, než se skutečně spustí:

$ shopt -s histverify
$ echo !$          #  Po stisknutí Enter příkaz není spuštěn
$ echo histverify  #  Nejprve se zobrazuje na obrazovce,
histverify         #  a poté se spustí 

8. Noclobber

Opět, pro ochranu před neštěstími, totiž před přepsáním souboru, který již existuje s přesměrovacím operátorem (>). To může být katastrofa, pokud nemáte zálohu.

Možnosť set -C zakazuje takové přepisování. V případě potřeby můžete ochranu obejít pomocí operátoru >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster