Néhány Bash opció jól ismert és gyakran használt. Például sokan írnak a forgatókönyv elejére
set -o xtrace
hibakereséshez,
set -o emelt
tévedésből kilépni ill
set -o errunset
kilépéshez, ha a hívott változó nincs beállítva.
De sok más lehetőség is van. Néha túl zavaróan vannak leírva a manasban, ezért összegyűjtöttem a leghasznosabbakat, magyarázattal együtt.
Megjegyzés: A Mac-eken előfordulhat, hogy a bash régebbi verziója (3.x helyett 4.x), ahol ezek a lehetőségek nem állnak rendelkezésre. Ebben az esetben lásd
set
vagy shopt
?
A bash beállítások kétféleképpen állíthatók be: szkriptből vagy parancssorból. Használhat beépített parancsokat set
и shopt
. Mindkettő megváltoztatja a héj viselkedését, nagyjából ugyanazt csinálják (különböző érvekkel), de különböznek egymástól set
öröklődnek vagy kölcsönzöttek más shell paramétereiből, míg a paraméterek shopt
bashban jött létre.
Ha meg szeretné tekinteni az aktuális beállításokat, futtassa:
$ set -o
$ shopt
Az opció aktiválásához in set
Hosszú vagy rövid szintaxis használatos:
$ set -o errunset
$ set -e
A hatás ugyanaz.
Az opció letiltásához mínusz helyett pluszt kell megadnia:
$ set +e
Sokáig nem emlékeztem erre a szintaxisra, mert rossznak tűnt a logika (a mínusz jel engedélyezi, a pluszjel pedig letiltja).
В shopt
(logikusabb) zászlókat használnak az opciók engedélyezésére és letiltására -s
(készlet) és -u
(beállítatlan):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Könyvtárak módosítása
Számos lehetőség segíti a könyvtárakkal való munkát.
1.cdspell
Ezzel a beállítással a bash elkezdi megérteni az elírásokat, és abba a mappába viszi, amelynek a nevét rosszul írta.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Sok éve használom ezt a lehetőséget, és nagyon ritkán (talán évente egyszer) hoz nagyon furcsa döntést. De más napokon cdspell
időt takarít meg, szó szerint minden nap.
2. autocd
Ha nem vagy hajlandó elfogadni a többszörös bejegyzés hatástalanságát cd
, akkor beállíthatja, hogy ez a beállítás az X mappába kerüljön, ha az X parancs nem létezik.
$ shopt -s autocd
$ abcdefg
$ cd ..
Az automatikus kiegészítéssel kombinálva ez lehetővé teszi, hogy gyorsan ugorjon a mappák között:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Csak ne adjon nevet a mappának rm -rf *
(igen, egyébként ez lehetséges).
3.direxpand
Ez egy nagyszerű lehetőség, amely kibővíti a környezeti változókat a Tab megnyomásával:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
tiszta kimenet
4. checkjobs
Ez a beállítás leállítja a munkamenetből való kijelentkezést, ha a háttérben még futnak feladatok.
A kilépés helyett a befejezetlen feladatok listája jelenik meg. Ha továbbra is ki szeretne lépni, lépjen be újra 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 процесса изменился
Helyettesítő szuperhatalmak
5.globstar
Ez az opció helyettesítő szuperképességeket biztosít! Ha beírod:
$ shopt -s globstar
$ ls **
akkor a shell minden könyvtárat és alkönyvtárat rekurzívan megjelenít.
Kombinálva direxpand
Gyorsan megtekinthet mindent, ami alacsonyabb a hierarchiában:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Ez a beállítás engedélyezi a reguláris kifejezésekhez gyakrabban társított funkciókat. 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ójelben vannak, és függőleges sáv választja el őket. Íme az elérhető operátorok:
? = a megadott minták nullára vagy egy előfordulására illeszkedik! = mutat mindent, ami nem egyezik a megadott mintákkal * = nulla vagy több előfordulás + = egy vagy több előfordulás @ = pontosan egy előfordulás
Balesetvédelem
7. histverify
Először kissé ijesztő lehet a rövidítések történetéből származó gyorsindítási parancsok használata !!
и !$
.
választási lehetőség histverify
először megnézheti, hogyan értelmezi a Bash a parancsot, mielőtt ténylegesen lefutna:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Ismét a balesetek elleni védelem érdekében, nevezetesen az átirányítási operátorral már létező fájl felülírásától (>
). Ez katasztrófa lehet, ha nincs tartalék.
választási lehetőség set -С
tiltja az ilyen felülírást. Szükség esetén a védelmet a kezelő segítségével megkerülheti >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Forrás: will.com