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 vagy .
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 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 -eA hatás ugyanaz.
Az opció kikapcsolásához a mínusz helyett pluszt kell tenni:
$ set +eHosszú 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 # <= offKö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\/folderTiszta 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áltozottBő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*)
cfileItt 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
