Sommige Bash-opties zijn bekend en worden vaak gebruikt. Veel mensen schrijven bijvoorbeeld aan het begin van het script
stel -o xtrace in
voor foutopsporing,
set -o foutre
per ongeluk afsluiten of
set -o errunset
om af te sluiten als de opgeroepen variabele niet is ingesteld.
Maar er zijn nog veel meer opties. Soms worden ze te verwarrend beschreven in manas, daarom heb ik hier een aantal van de nuttigste verzameld, met uitleg.
Opmerking: Macs hebben mogelijk een oudere versie van bash (3.x in plaats van 4.x), waarbij niet al deze opties beschikbaar zijn. In dit geval, zie
set
of shopt
?
Er zijn twee manieren om bash-opties in te stellen: vanuit een script of vanaf de opdrachtregel. U kunt ingebouwde opdrachten gebruiken set
и shopt
. Beide veranderen het gedrag van de shell, doen vrijwel hetzelfde (met verschillende argumenten), maar verschillen daarin set
worden geërfd of geleend van parameters van andere shells, terwijl parameters shopt
gemaakt in bash.
Als u de huidige opties wilt zien, voert u het volgende uit:
$ set -o
$ shopt
Om de optie in te activeren set
Er wordt een lange of korte syntaxis gebruikt:
$ set -o errunset
$ set -e
Het effect is hetzelfde.
Om de optie uit te schakelen, moet je een plus in plaats van een min plaatsen:
$ set +e
Lange tijd kon ik me deze syntaxis niet herinneren omdat de logica verkeerd leek (een minteken schakelt de optie in, en een plusteken schakelt deze uit).
В shopt
(meer logische) vlaggen worden gebruikt om opties in en uit te schakelen -s
(ingesteld) en -u
(niet ingesteld):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Mappen wijzigen
Er zijn verschillende opties die u helpen bij het werken met mappen.
1.cdspell
Met deze instelling zal bash typefouten beginnen te begrijpen en u naar de map brengen waarvan u de naam verkeerd heeft gespeld.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Ik gebruik deze optie al vele jaren en zeer zelden (misschien één keer per jaar) wordt er een heel vreemde beslissing genomen. Maar op andere dagen cdspell
bespaart tijd, letterlijk elke dag.
2. autocd
Als u de inefficiëntie van meerdere inzendingen niet wilt accepteren cd
, dan kunt u deze optie instellen om naar de map X te gaan als de X-opdracht niet bestaat.
$ shopt -s autocd
$ abcdefg
$ cd ..
In combinatie met automatisch aanvullen kunt u hierdoor snel tussen mappen springen:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Geef de map gewoon geen naam rm -rf *
(ja, dit is trouwens mogelijk).
3. direxpand
Dit is een coole optie die omgevingsvariabelen uitbreidt door op Tab te drukken:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
schone uitvoer
4. controleopdrachten
Deze optie stopt met het afmelden van de sessie als er nog steeds taken op de achtergrond worden uitgevoerd.
In plaats van af te sluiten, wordt een lijst met onvoltooide taken weergegeven. Als je nog steeds wilt afsluiten, ga dan opnieuw naar binnen 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 процесса изменился
Vervanging supermachten
5. wereldster
Deze optie geeft je vervangingssuperkrachten! Als u invoert:
$ shopt -s globstar
$ ls **
dan zal de shell alle mappen en submappen recursief tonen.
In combinatie met direxpand
Je kunt snel alles lager in de hiërarchie bekijken:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Met deze optie worden functies ingeschakeld die vaker worden geassocieerd met reguliere expressies. Soms is dit erg handig:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Hier worden de patronen tussen haakjes geplaatst en gescheiden door een verticale balk. Dit zijn de beschikbare operators:
? = komt overeen met nul of één exemplaar van de gegeven patronen! = toon alles wat niet overeenkomt met de gegeven patronen * = nul of meer exemplaren + = één of meer exemplaren @ = precies één exemplaar
Bescherming tegen ongevallen
7. Historie verifiëren
In het begin kan het een beetje eng zijn om de snelstartopdrachten uit de geschiedenis van afkortingen te gebruiken !!
и !$
.
optie histverify
laat je eerst zien hoe Bash de opdracht interpreteert voordat deze daadwerkelijk wordt uitgevoerd:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Nogmaals, om te beschermen tegen ongelukken, namelijk tegen het overschrijven van een bestand dat al bestaat met de omleidingsoperator (>
). Dit kan een ramp zijn als je geen back-up hebt.
optie set -С
verbiedt dergelijk overschrijven. Indien nodig kunt u de beveiliging omzeilen met behulp van de operator >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Bron: www.habr.com