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ď
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 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