Osm málo známých možností Bash

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 zde nebo zde.

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 původ. Možnosti 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

Přidat komentář