Vissa Bash-alternativ är välkända och används ofta. Många skriver till exempel i början av manuset
set-o xtrace
för felsökning,
set -o errexit
att lämna av misstag eller
set -o errunset
för att avsluta om den anropade variabeln inte är inställd.
Men det finns många andra alternativ. Ibland beskrivs de för förvirrande i manas, så jag har samlat några av de mest användbara här, med förklaring.
Obs: Mac-datorer kan ha en äldre version av bash (3.x istället för 4.x) där inte alla dessa alternativ är tillgängliga. I det här fallet, se
set
eller shopt
?
Det finns två sätt att ställa in bash-alternativ: från ett skript eller från kommandoraden. Du kan använda inbyggda kommandon set
и shopt
. Båda ändrar skalets beteende, gör ungefär samma sak (med olika argument), men skiljer sig åt i sina set
ärvs eller lånas från parametrar för andra skal, medan parametrar shopt
skapad i bash.
Om du vill se de aktuella alternativen, kör:
$ set -o
$ shopt
För att aktivera alternativet i set
Lång eller kort syntax används:
$ set -o errunset
$ set -e
Effekten är densamma.
För att inaktivera alternativet måste du sätta ett plus istället för ett minus:
$ set +e
Under en lång tid kunde jag inte komma ihåg den här syntaxen eftersom logiken verkade fel (ett minustecken aktiverar alternativet och ett plustecken inaktiverar det).
В shopt
(mer logiska) flaggor används för att aktivera och inaktivera alternativ -s
(set) och -u
(avstängd):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Byta kataloger
Det finns flera alternativ som hjälper dig att arbeta med kataloger.
1.cdspell
Med den här inställningen börjar bash förstå stavfel och tar dig till mappen vars namn du stavat fel.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Jag har använt det här alternativet i många år och väldigt sällan (kanske en gång om året) tar det ett väldigt konstigt beslut. Men andra dagar cdspell
sparar tid, bokstavligen varje dag.
2. autocd
Om du inte är villig att acceptera ineffektiviteten av flera poster cd
, då kan du ställa in det här alternativet för att flytta till X-mappen om X-kommandot inte finns.
$ shopt -s autocd
$ abcdefg
$ cd ..
I kombination med autoslutförande kan du snabbt hoppa mellan mappar:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Namnge bara inte mappen rm -rf *
(ja, det är förresten möjligt).
3.direxpand
Det här är ett coolt alternativ som utökar miljövariabler genom att trycka 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
ren utgång
4. kontrolljobb
Det här alternativet slutar logga ut från sessionen om det fortfarande finns jobb som körs i bakgrunden.
Istället för att avsluta visas en lista med oavslutade uppgifter. Om du fortfarande vill avsluta, gå in 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 процесса изменился
Substitutionssupermakter
5.globstar
Detta alternativ ger dig substitutionssuperkrafter! Om du anger:
$ shopt -s globstar
$ ls **
då kommer skalet att visa alla kataloger och underkataloger rekursivt.
I kombination med direxpand
Du kan snabbt se allt lägre i hierarkin:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Det här alternativet aktiverar funktioner som är vanligare förknippade med reguljära uttryck. Ibland är det här väldigt användbart:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Här är mönstren placerade inom parentes och åtskilda av en vertikal stapel. Här är de tillgängliga operatörerna:
? = matchar noll eller en förekomst av de givna mönstren! = visa allt som inte matchar de givna mönstren * = noll eller fler förekomster + = en eller flera förekomster @ = exakt en förekomst
Olycksskydd
7. histverifiera
Det kan vara lite läskigt till en början att använda snabbstartkommandona från förkortningarnas historia !!
и !$
.
alternativ histverify
låter dig först se hur Bash tolkar kommandot innan det faktiskt körs:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Återigen, för att skydda mot olyckor, nämligen från att skriva över en fil som redan finns hos omdirigeringsoperatören (>
). Detta kan vara en katastrof om du inte har en säkerhetskopia.
alternativ set -С
förbjuder sådan överskrivning. Vid behov kan du kringgå skyddet med hjälp av operatören >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Källa: will.com