Některé možnosti Bash jsou dobře známé a často používané. Mnoho lidí například píše na začátku scénáře
nastavit -o xtrace
pro ladění,
nastavit -o errexit
omylem odejít nebo
set -o errunset
pro ukončení, pokud volaná proměnná není nastavena.
Ale existuje mnoho dalších možností. Někdy jsou v manasu popsány příliš zmateně, proto jsem zde sebral některé z nejužitečnějších s vysvětlením.
Poznámka: Macy mohou mít starší verzi bash (3.x spíše než 4.x), kde nejsou k dispozici všechny tyto možnosti. V tomto případě viz
set
nebo shopt
?
Možnosti bash lze nastavit dvěma způsoby: ze skriptu nebo z příkazového řádku. Můžete použít vestavěné příkazy set
и shopt
. Oba mění chování shellu, dělají v podstatě totéž (s různými argumenty), ale liší se ve svých set
jsou zděděny nebo vypůjčeny z parametrů jiných shellů, zatímco parametry shopt
vytvořené v bash.
Pokud chcete vidět aktuální možnosti, spusťte:
$ set -o
$ shopt
Chcete-li aktivovat možnost v set
Používá se dlouhá nebo krátká syntaxe:
$ set -o errunset
$ set -e
Efekt je stejný.
Chcete-li tuto možnost zakázat, musíte místo mínus zadat plus:
$ set +e
Dlouho jsem si nemohl vzpomenout na tuto syntaxi, protože se mi zdála špatná logika (znaménko mínus volbu povoluje a znaménko plus ji zakazuje).
В shopt
(logičtější) příznaky se používají k povolení a zakázání možností -s
(set) a -u
(nenastaveno):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Změna adresářů
Existuje několik možností, které vám pomohou pracovat s adresáři.
1.cdspell
S tímto nastavením bash začne chápat překlepy a přenese vás do složky, jejíž název jste napsali špatně.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Tuto možnost používám již mnoho let a velmi zřídka (možná jednou za rok) udělá velmi zvláštní rozhodnutí. Ale v jiné dny cdspell
šetří čas doslova každý den.
2. autocd
Pokud nejste ochotni akceptovat neefektivitu vícenásobných záznamů cd
, pak můžete nastavit tuto možnost tak, aby se přesunula do složky X, pokud příkaz X neexistuje.
$ shopt -s autocd
$ abcdefg
$ cd ..
V kombinaci s automatickým doplňováním vám to umožňuje rychle přeskakovat mezi složkami:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Jen nepojmenujte složku rm -rf *
(ano, mimochodem, je to možné).
3.rozbalit
Toto je skvělá možnost, která rozšiřuje proměnné prostředí stisknutím klávesy 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í práce
Tato možnost zastaví odhlašování z relace, pokud na pozadí stále běží úlohy.
Místo ukončení se zobrazí seznam nedokončených úkolů. Pokud stále chcete skončit, vstupte znovu 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 процесса изменился
Superschopnosti střídání
5.globstar
Tato možnost vám dává substituční superschopnosti! Pokud zadáte:
$ shopt -s globstar
$ ls **
pak shell zobrazí všechny adresáře a podadresáře rekurzivně.
V kombinaci s direxpand
Můžete rychle zobrazit vše níže v hierarchii:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Tato možnost povolí 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 vzory umístěny v závorkách a odděleny svislou čárou. Zde jsou dostupní operátoři:
? = odpovídá žádnému nebo jednomu výskytu daných vzorů! = zobrazit vše, co neodpovídá daným vzorům * = žádný nebo více výskytů + = jeden nebo více výskytů @ = přesně jeden výskyt
Ochrana proti nehodám
7. histverifikovat
Zpočátku může být trochu děsivé používat rychlé spouštěcí příkazy z historie zkratek !!
и !$
.
Možnost histverify
umožňuje nejprve vidět, jak Bash interpretuje příkaz, než se skutečně spustí:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Opět k ochraně před nehodami, konkrétně před přepsáním souboru, který již existuje s operátorem přesměrování (>
). To může být katastrofa, pokud nemáte zálohu.
Možnost set -С
takové přepisování zakazuje. 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: www.habr.com