Otte mindre kendte Bash-muligheder

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å her eller her.

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 oprindelse. 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 -e

Effekten er den samme.

For at deaktivere en indstilling skal man sætte et plus i stedet for et minus:

$ set +e

Læ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\/folder

Rent 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 ændret

Superkræ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*)
cfile

Her 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

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster