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

Niektoré možnosti Bash sú dobre známe a často používané. Veľa ľudí napríklad píše na začiatku scenára

nastaviť -o xtrace

na ladenie,

nastaviť -o errexit

omylom vystúpiť resp

set -o errunset

pre ukončenie, ak volaná premenná nie je nastavená.

Existuje však mnoho ďalších možností. Niekedy sú v manas popísané príliš mätúco, preto som tu zhromaždil niektoré z najužitočnejších s vysvetlením.

Poznámka: Počítače Mac môžu mať staršiu verziu bash (3.x namiesto 4.x), kde nie sú dostupné všetky tieto možnosti. V tomto prípade viď tu alebo tu.

set alebo shopt?

Existujú dva spôsoby, ako nastaviť možnosti bash: zo skriptu alebo z príkazového riadku. Môžete použiť vstavané príkazy set и shopt. Obaja menia správanie shellu, robia takmer to isté (s rôznymi argumentmi), ale líšia sa vo svojich pôvodu. možnosti set sú zdedené alebo požičané z parametrov iných shellov, zatiaľ čo parametre shopt vytvorené v bash.

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

$ set -o
$ shopt

Ak chcete aktivovať možnosť v set Používa sa dlhá alebo krátka syntax:

$ set -o errunset
$ set -e

Účinok je rovnaký.

Ak chcete túto možnosť zakázať, musíte namiesto mínusu zadať plus:

$ set +e

Dlho som si nemohol spomenúť na túto syntax, pretože logika sa zdala nesprávna (znamienko mínus túto možnosť povoľuje a znamienko plus ju zakazuje).

В shopt (logickejšie) príznaky sa používajú na zapnutie a vypnutie možností -s (súprava) a -u (nenastavené):

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

Zmena adresárov

Existuje niekoľko možností, ktoré vám pomôžu pri práci s adresármi.

1.cdspell

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

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

Túto možnosť používam už mnoho rokov a veľmi zriedka (možno raz za rok) urobí veľmi zvláštne rozhodnutie. Ale v iné dni cdspell šetrí čas doslova každý deň.

2. autocd

Ak nie ste ochotní akceptovať neefektívnosť viacerých záznamov cd, potom 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 vám to umožňuje rýchlo preskakovať medzi priečinkami:

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

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

3.rozšíriť

Toto je skvelá možnosť, ktorá rozširuje premenné prostredia stlačením klávesu Tab:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

Čistý výstup

4. kontrolné úlohy

Táto možnosť zastaví odhlásenie z relácie, ak na pozadí stále bežia úlohy.

Namiesto ukončenia sa zobrazí zoznam nedokončených úloh. Ak stále chcete odísť, vstúpte znova 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 процесса  изменился

Substitučné superschopnosti

5.globstar

Táto možnosť vám dáva substitučné superschopnosti! Ak zadáte:

$ shopt -s globstar
$ ls **

potom shell zobrazí všetky adresáre a podadresáre rekurzívne.

V kombinácii s direxpand Môžete rýchlo zobraziť všetko nižšie v hierarchii:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Táto možnosť umožňuje funkcie, ktoré sú bežnejšie spojené s regulárnymi výrazmi. Niekedy je to veľmi užitočné:

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

Tu sú vzory umiestnené v zátvorkách a oddelené zvislou čiarou. Tu sú dostupní operátori:

? = zodpovedá nule alebo jednému výskytu daných vzorov! = zobraziť všetko, čo sa nezhoduje s danými vzormi * = nula alebo viac výskytov + = jeden alebo viac výskytov @ = presne jeden výskyt

Ochrana pred úrazmi

7. histverifikovať

Na začiatku môže byť trochu strašidelné použiť príkazy rýchleho spustenia z histórie skratiek !! и !$.

Možnosť histverify vám umožní najprv vidieť, ako Bash interpretuje príkaz predtým, ako sa skutočne spustí:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

Opäť na ochranu pred nehodami, konkrétne pred prepísaním súboru, ktorý už existuje s operátorom presmerovania (>). To môže byť katastrofa, ak nemáte zálohu.

Možnosť set -С zakazuje takéto prepisovanie. V prípade potreby môžete ochranu obísť pomocou operátora >|:

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

Zdroj: hab.com

Pridať komentár