Åtta mindre kända Bash-alternativ

Vissa Bash-alternativ är välkända och används ofta. Till exempel skriver många i början av sitt skript

set -o xtrace

för felsökning,

set -o errexit

för att avsluta vid fel eller

set -o errunset

för att avsluta om en variabel som anropas inte är inställd.

Men det finns många andra alternativ. Ibland beskrivs de förvirrande i manualerna, så jag har samlat några av de mest användbara här, med förklaringar.

Obs: på Mac kan en äldre version av bash (3.x istället för 4.x) vara installerad, där inte alla dessa alternativ är tillgängliga. I så fall, se här eller här.

set eller shopt?

Det finns två sätt att ställa in bash-alternativ: från skriptet eller från kommandoraden. Man kan använda inbyggda kommandon set och shopt. Båda ändrar beteendet hos shell, gör i stort sett samma sak (med olika argument) men skiljer sig i sina ursprung.Alternativen set ärvda eller lånade från andra shell-alternativ, medan alternativ shopt skapas i bash.

Om du vill se de aktuella alternativen, kör:

$ set -o
$ shopt

För att aktivera ett alternativ används lång eller kort syntax: set $ set -o errunset $ set -e

Effekten är densamma.

För att stänga av ett alternativ måste du sätta ett plus istället för ett minus:

$ set +e

Jag kunde länge inte komma ihåg denna syntax, eftersom logiken verkar felaktig (minus inkluderar alternativet, medan plus stänger av det).

För att inkludera och stänga av alternativ används (mer logiska) flaggor

I shopt (set) och -s (unset): -u $ shopt -s cdspell # <= på $ shopt -u cdspell # <= av

Ändra kataloger

Det finns flera alternativ som hjälper till att arbeta med kataloger.

1. cdspell

Med denna inställning börjar bash förstå stavfel och flyttar dig till mappen vars namn du skrivit fel.

$ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd ..

Jag har använt detta alternativ i många år, och mycket sällan (kanske en gång om året) gör det ett mycket konstigt val. Men för resten av dagarna

cdspell sparar tid, bokstavligen varje dag. 2. autocd

Om du inte är beredd att stå ut med ineffektiviteten i upprepade inmatningar,

kan du aktivera detta alternativ för att flytta till mappen X om kommando X inte existerar. cd$ shopt -s autocd $ abcdefg $ cd ..

I kombination med automatisk ifyllnad gör detta att man snabbt kan hoppa mellan mappar:

$ ./abc[TAB][RETURN] cd -- ./abcdefg

Bara kalla inte mappen

rm -rf * (ja, förresten, det är möjligt). 3. direxpand

Detta är ett bra alternativ som expanderar miljövariabler när du trycker på Tab:

Это классная опция, которая расширяет переменные среды по нажатию Tab:

$ shopt -s direxpand
$ .\/ [TAB]     # ersätts med...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB]     # ersätts med...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] #  ersätts med...
$ \/full\/path\/to\/home\/folder

Ren utgång

4. checkjobs

Denna parameter stoppar utgången från sessionen om det fortfarande finns jobb som körs i bakgrunden.

Istället för utgång visas en lista över ofullbordade uppgifter. Om du ändå vill avsluta, skriv in det igen exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= Process-ID för shell
$ sleep 999 &
$ exit
Det finns körande jobb.
[1]+  Running                 sleep 999 &
$ echo $$
68125             # <= Process-ID för samma shell
$ exit
Det finns körande jobb.
[1]+  Running                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= den här gången har Process-ID förändrats

Superkrafter för globbing

5. globstar

Detta alternativ ger dig superkrafter för globbing! Om du skriver in:

$ shopt -s globstar
$ ls **

då kommer shell att visa alla kataloger och underkataloger rekursivt.

I kombination med direxpand kan man snabbt bläddra igenom allt som finns längre ner i hierarkin:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Visa alla 2033 möjligheter? (y eller n) 

6. extglob

Detta alternativ aktiverar funktioner som oftare associeras med reguljära uttryck. Ibland är detta mycket användbart:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Här placeras mönstren inom parenteser och separeras med ett vertikalt streck. Här är tillgängliga operatorer:

? = соответствует нулю или одному вхождению заданных шаблонов
! = показать всё, что не соответствует заданным шаблонам
* = ноль или более вхождений
+ = одно или более вхождений
@ = ровно одно вхождение

Skydd mot olyckor

7. histverify

I början kan det kännas lite skrämmande att använda snabbinmatning av kommandon från historiken med förkortningarna !! och !$.

Alternativ histverify ger dig möjlighet att först se hur Bash tolkar kommandot, innan det verkligen körs:

$ shopt -s histverify
$ echo !$          # <= Vid Enter trycks kommandot inte körs
$ echo histverify  # <= Det visas först på skärmen,
histverify         # <= och körs sedan 

8. Noclobber

Återigen, för att skydda mot olyckor, nämligen för att förhindra skrivning över en fil som redan finns med omdirigeringsoperatorn (>). Detta kan bli en katastrof om du inte har en säkerhetskopia.

Alternativ set -C förbjuder sådan överskrivning. Vid behov kan du kringgå skyddet med operatorn >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: kan inte skriva över befintlig fil
$ echo something >| afile
$

Källa: habr.com

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster