Nyolc kevésbé ismert Bash-opció

Néhány bash opció jól ismert és gyakran használt. Például sokan a script elején ezt írják:

set -o xtrace

hibakeresés céljából,

set -o errexit

a hiba esetén való kilépéshez, vagy

set -o errunset

kilépéshez, ha a hívott változó nincs beállítva.

De sok más lehetőség is létezik. Néha a man oldalak nagyon zavarosan magyarázzák el őket, ezért itt összegyűjtöttem a leghasznosabbakat, magyarázattal.

Megjegyzés: Macen lehet, hogy régebbi bash verzió van (3.x, nem 4.x), ahol nem mindegyik opció elérhető. Ebben az esetben nézd meg a itt vagy itt.

set vagy shopt-ot.?

Két módja van a bash paraméterek beállításának: a scriptből vagy a parancssorból. Használhatók beépített parancsok, set és shopt-ot.mindkettő megváltoztatja a shell viselkedését, nagyjából ugyanazt csinálja (különböző argumentumokkal), és a származásukkal különböznek.A paraméterek set öröklődnek vagy más shell paraméterekből származnak, míg a paraméterek shopt-ot. a bashban jönnek létre.

Ha szeretnéd megnézni a jelenlegi opciókat, futtasd:

$ set -o
$ shopt

Az opció aktiválására set hosszú vagy rövid szintaxist használhatsz:

$ set -o errunset
$ set -e

A hatás ugyanaz.

Az opció kikapcsolásához a mínusz helyett pluszt kell tenni:

$ set +e

Hosszú ideig nem tudtam megjegyezni ezt a szintaxist, mivel a logika helytelennek tűnt (mínusz bekapcsolja az opciót, plusz kikapcsolja).

A shopt-ot. Az opciók bekapcsolásához és kikapcsolásához (logikusabb) zászlókat használnak -s (set) és -u (unset):

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

Könyvtárak megváltoztatása

Van néhány opció, ami segít a könyvtárakkal való munkában.

1. cdspell

Ezzel a beállítással a bash elkezdi megérteni a gépelési hibákat, és átvisz a mappába, amelynek nevét hibásan adtad meg.

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

Évek óta használom ezt az opciót, és nagyon ritkán (talán évente egyszer) hoz nagyon furcsa döntést. De a többi napon cdspell minden nap időt spórol.

2. autocd

Ha nem tudsz megbékélni a többszöri beírás hatékonyságával, cdakkor beállíthatod ezt az opciót, hogy átvigyen egy X könyvtárba, ha az X parancs nem létezik.

$ shopt -s autocd
$ abcdefg
$ cd ..

Az autocompletion-nal kombinálva gyorsan ugrálhatsz a könyvtárak között:

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

Csak ne nevezd el a mappát: rm -rf * (igen, egyébként ez lehetséges).

3. direxpand

Ez egy klassz opció, ami kiterjeszti a környezeti változókat Tab megnyomásakor:

$ shopt -s direxpand
$ .\/[TAB]     # helyettesítve...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB]     # helyettesítve...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] #  helyettesítve...
$ \/full\/path\/to\/home\/folder

Tiszta kilépés

4. checkjobs

Ez a paraméter megakadályozza a kilépést, ha a háttérben még futnak feladatok.

A kilépés helyett egy lista jelenik meg a befejezetlen feladatokról. Ha mégis szeretnél kilépni, írd be újra exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= A shell folyamat azonosítója
$ sleep 999 &
$ exit
Futnak aktív feladatok.
[1]+  Folyamatban                 sleep 999 &
$ echo $$
68125             # <= A shell folyamat azonosítója ugyanaz
$ exit
Futnak aktív feladatok.
[1]+  Folyamatban                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= ezúttal a folyamat azonosítója megváltozott

Bővített globolás

5. globstar

Ez az opció bővített globolást biztosít számodra! Ha beírod:

$ shopt -s globstar
$ ls **

akkor a shell rekurzívan megmutatja az összes könyvtárat és alkönyvtárat.

Kombinálva a direxpand gyorsan áttekintheted az összes alá tartozó dolgot a hierarchiában:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Megjeleníthető az összes 2033 lehetőség? (i vagy n) 

6. extglob

Ez az opció aktiválja azokat a funkciókat, amelyek gyakran kapcsolódnak a reguláris kifejezésekhez. Néha ez nagyon hasznos:

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

Itt a minták zárójelekbe kerülnek, és függőleges vonallal vannak elválasztva. Íme a rendelkezésre álló operátorok:

? = соответствует нулю или одному вхождению заданных шаблонов
! = показать всё, что не соответствует заданным шаблонам
* = ноль или более вхождений
+ = одно или более вхождений
@ = ровно одно вхождение

Balesetvédelmi intézkedések

7. histverify

Elsőre talán kicsit ijesztő lehet a gyors parancsok használata a történelemből az !! és !$.

Opció histverify lehetővé teszi, hogy először megnézd, hogyan értelmezi a Bash a parancsot, mielőtt az valóban végrehajtásra kerül:

$ shopt -s histverify
$ echo !$          # <= Enter megnyomásakor a parancs nem indul el
$ echo histverify  # <= Először megjelenik a képernyőn,
histverify         # <= majd elindul 

8. Noclobber

Ismét, a balesetvédelmi intézkedés érdekében, pontosan a már meglévő fájl felülírásával a redirekciós operátorral (>). Ez katasztrofális lehet, ha nincs biztonsági mentésed.

Opció set -C megakadályozza az ilyen felülírást. Szükség esetén megkerülheted a védelmet az >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: a meglévő fájl nem írható felül
$ echo something >| afile
$

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster