Åtta lite kända bash-alternativ

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 här eller här.

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 ursprung. alternativ 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

Lägg en kommentar