Nogle Bash-muligheder er velkendte og ofte brugt. For eksempel skriver mange mennesker i begyndelsen af manuskriptet
sæt -o xtrace
til fejlretning,
sæt -o errexit
at forlade ved en fejl eller
sæt -o errunset
for at afslutte, hvis den kaldte variabel ikke er indstillet.
Men der er mange andre muligheder. Nogle gange er de beskrevet for forvirrende i manas, så jeg har samlet nogle af de mest nyttige her, med forklaring.
Bemærk: Mac'er kan have en ældre version af bash (3.x i stedet for 4.x), hvor ikke alle disse muligheder er tilgængelige. I dette tilfælde, se
set
eller shopt
?
Der er to måder at indstille bash-indstillinger på: fra et script eller fra kommandolinjen. Du kan bruge indbyggede kommandoer set
и shopt
. Begge ændrer skallens adfærd, gør stort set det samme (med forskellige argumenter), men adskiller sig i deres set
er arvet eller lånt fra parametre for andre skaller, mens parametre shopt
skabt i bash.
Hvis du vil se de aktuelle muligheder, skal du køre:
$ set -o
$ shopt
For at aktivere muligheden i set
Lang eller kort syntaks bruges:
$ set -o errunset
$ set -e
Effekten er den samme.
For at deaktivere muligheden skal du sætte et plus i stedet for et minus:
$ set +e
I lang tid kunne jeg ikke huske denne syntaks, fordi logikken virkede forkert (et minustegn aktiverer muligheden, og et plustegn deaktiverer det).
В shopt
(mere logiske) flag bruges til at aktivere og deaktivere muligheder -s
(sæt) og -u
(frakoblet):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Ændring af mapper
Der er flere muligheder, der hjælper dig med at arbejde med mapper.
1.cdspell
Med denne indstilling begynder bash at forstå stavefejl og fører dig til den mappe, hvis navn du har stavet forkert.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Jeg har brugt denne mulighed i mange år og meget sjældent (måske en gang om året) tager den en meget mærkelig beslutning. Men på andre dage cdspell
sparer tid, bogstaveligt talt hver dag.
2. autocd
Hvis du ikke er villig til at acceptere ineffektiviteten af flere poster cd
, så kan du indstille denne mulighed til at flytte til X-mappen, hvis X-kommandoen ikke eksisterer.
$ shopt -s autocd
$ abcdefg
$ cd ..
Kombineret med autofuldførelse giver dette dig mulighed for hurtigt at hoppe mellem mapper:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Bare lad være med at navngive mappen rm -rf *
(ja, det er i øvrigt muligt).
3.direxpand
Dette er en cool mulighed, der udvider miljøvariabler ved at trykke på Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
rent output
4. checkjobs
Denne mulighed stopper med at logge ud af sessionen, hvis der stadig kører job i baggrunden.
I stedet for at afslutte, vises en liste over ufærdige opgaver. Hvis du stadig ønsker at afslutte, så indtast igen 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 процесса изменился
Substitutionssupermagter
5.globstar
Denne mulighed giver dig substitutionssuperkræfter! Hvis du indtaster:
$ shopt -s globstar
$ ls **
så vil skallen vise alle mapper og undermapper rekursivt.
I kombination med direxpand
Du kan hurtigt se alt lavere i hierarkiet:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Denne indstilling aktiverer funktioner, der er mere almindeligt forbundet med regulære udtryk. Nogle gange er dette meget nyttigt:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Her er mønstrene sat i parentes og adskilt af en lodret streg. Her er de tilgængelige operatører:
? = matcher nul eller én forekomst af de givne mønstre ! = vis alt, der ikke stemmer overens med de givne mønstre * = nul eller flere forekomster + = en eller flere forekomster @ = nøjagtig én forekomst
Ulykkesbeskyttelse
7. histverificere
Det kan være lidt skræmmende i starten at bruge hurtigstartkommandoer fra forkortelsernes historie !!
и !$
.
valgmulighed histverify
lader dig først se, hvordan Bash fortolker kommandoen, før den rent faktisk kører:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Igen, for at beskytte mod ulykker, nemlig mod at overskrive en fil, der allerede eksisterer hos omdirigeringsoperatøren (>
). Dette kan være en katastrofe, hvis du ikke har en backup.
valgmulighed set -С
forbyder sådan overskrivning. Hvis det er nødvendigt, kan du omgå beskyttelsen ved hjælp af operatøren >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Kilde: www.habr.com