Acht weinig bekende bash-opties

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 hier of hier.

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 oorsprong. Opties 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

Voeg een reactie