Nogle Bash-muligheder er velkendte og ofte brugte. For eksempel skriver mange i starten af scriptet
set -o xtrace
til debugging,
set -o errexit
til at stoppe ved fejl, eller
set -o errunset
til at stoppe, hvis en kaldt variabel ikke er sat.
Men der er mange andre muligheder. Nogle gange er de forvirrende beskrevet i manualer, så jeg har samlet nogle af de mest nyttige her med forklaring.
Bemærk: På Mac kan der være en ældre version af bash (3.x, ikke 4.x), hvor ikke alle disse muligheder er tilgængelige. I så fald se på eller .
set eller shopt?
Der er to måder at sætte Bash-indstillinger på: fra scriptet eller fra kommandolinjen. Man kan bruge indbyggede kommandoer set og shopt. Begge ændrer shellens adfærd, gør stort set det samme (med forskellige argumenter), og adskiller sig i deres . Indstillingerne set arv eller overføres fra indstillingerne i andre shell, mens indstillingerne shopt er oprettet i bash.
Hvis du vil se de nuværende indstillinger, kan du køre:
$ set -o
$ shopt For at aktivere en indstilling i set bruges der en lang eller kort syntaks:
$ set -o errunset
$ set -eEffekten er den samme.
For at deaktivere en indstilling skal man sætte et plus i stedet for et minus:
$ set +eLænge kunne jeg ikke huske denne syntaks, da logikken virker forkert (minus aktiverer indstillingen, mens plus deaktiverer).
I shopt Til aktivering og deaktivering af indstillinger bruges (mere logiske) flag -s (set) og -u (unset):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= offÆndring af kataloger
Der er flere indstillinger, der hjælper med at arbejde med kataloger.
1. cdspell
Med denne indstilling vil bash begynde at forstå stavefejl og føre dig til den mappe, hvis navn du har skrevet forkert.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd .. Jeg har brugt denne indstilling i mange år, og meget sjældent (måske én gang om året) træffer den en meget underlig beslutning. Men i de fleste dage cdspell sparer tid, hver dag.
2. autocd
Hvis du ikke kan acceptere ineffektiviteten ved gentagen indtastning af cd, kan du aktivere denne indstilling for at bevæge dig ind i mappe X, hvis kommando X ikke eksisterer.
$ shopt -s autocd
$ abcdefg
$ cd ..I kombination med autocompletion giver det mulighed for hurtigt at hoppe mellem mapper:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg Bare sørg for ikke at navngive mappen rm -rf * (ja, det er muligt).
3. direxpand
Dette er en fed indstilling, der udvider miljøvariabler ved at trykke på Tab:
$ shopt -s direxpand
$ .\/[TAB] # erstatter med...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB] # erstatter med...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] # erstatter med...
$ \/full\/path\/to\/home\/folderRent udgang
4. checkjobs
Denne parameter stopper udgangen fra sessionen, hvis der stadig kører baggrundsopgaver.
I stedet for at logge ud vises en liste over uafsluttede opgaver. Hvis du stadig ønsker at logge ud, skal du indtaste sigreturn.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID for process i shell
$ sleep 999 &
$ exit
Der er kørende opgaver.
[1]+ Kørende sleep 999 &
$ echo $$
68125 # <= ID for process i shell er den samme
$ exit
Der er kørende opgaver.
[1]+ Kørende sleep 999 &
$ exit
$ echo $$
$ 59316 # <= denne gang er ID for process ændretSuperkræfter til substitution
5. globstar
Denne indstilling giver dig superkræfter til substitution! Hvis du indtaster:
$ shopt -s globstar
$ ls **vil shell'en rekursivt vise alle mapper og undermapper.
I kombination med direxpand kan du hurtigt se alt, der ligger dybere i hierarkiet:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Vis alle 2033 muligheder? (y eller n) 6. extglob
Denne indstilling aktiverer funktioner, der ofte er forbundet med regulære udtryk. Nogle gange er det meget nyttigt:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfileHer placeres mønstrene i parentes og adskilles med en lodret linje. Her er de tilgængelige operatorer:
? = соответствует нулю или одному вхождению заданных шаблонов ! = показать всё, что не соответствует заданным шаблонам * = ноль или более вхождений + = одно или более вхождений @ = ровно одно вхождение
Beskyttelse mod uheld
7. histverify
I starten kan det virke lidt skræmmende at bruge hurtigstart af kommandoer fra historikken med forkortelsen !! og !$.
Mulighed histverify giver mulighed for først at se, hvordan Bash fortolker kommandoen, før den rent faktisk køres:
$ shopt -s histverify
$ echo !$ # <= Ved at trykke på Enter udføres kommandoen ikke
$ echo histverify # <= Den vises først på skærmen,
histverify # <= og derefter køres den 8. Noclobber
Igen, for at beskytte mod uheld, især mod overskrivning af en fil, der allerede findes med omdirigeringsoperatoren (>). Dette kan blive en katastrofe, hvis du ikke har en sikkerhedskopi.
Mulighed set -C forhindrer sådanne overskrivninger. Hvis det er nødvendigt, kan beskyttelsen omgås med operatoren >|:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: kan ikke overskrive eksisterende fil
$ echo something >| afile
$Kilde: habr.com
