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 alebo .
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 . 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 -eEfekt je rovnaký.
Na deaktiváciu možnosti je potrebné namiesto mínusu dať plus:
$ set +eDlho 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 # <= offZmena 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ěniloSuper 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*)
cfileZde 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
