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 eller .
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 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 katalogerDet 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\/folderRen 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ändratsSuperkrafter 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*)
cfileHä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
