Åtte lite kjente Bash-alternativer

Noen Bash-alternativer er velkjente og ofte brukt. For eksempel er det mange som skriver i begynnelsen av manuset

sett -o xtrace

for feilsøking,

sett -o errexit

å avslutte ved en feiltakelse eller

sett -o feilsett

for å avslutte hvis den kalte variabelen ikke er satt.

Men det er mange andre alternativer. Noen ganger er de beskrevet for forvirrende i manas, så jeg har samlet noen av de mest nyttige her, med forklaring.

Merk: Mac-maskiner kan ha en eldre versjon av bash (3.x i stedet for 4.x) der ikke alle disse alternativene er tilgjengelige. I dette tilfellet, se her eller her.

set eller shopt?

Det er to måter å angi bash-alternativer på: fra et skript eller fra kommandolinjen. Du kan bruke innebygde kommandoer set и shopt. Begge endrer oppførselen til skallet, gjør omtrent det samme (med forskjellige argumenter), men er forskjellige i deres opprinnelse. Alternativer set er arvet eller lånt fra parametere til andre skjell, mens parametere shopt opprettet i bash.

Hvis du vil se gjeldende alternativer, kjør:

$ set -o
$ shopt

For å aktivere alternativet i set Lang eller kort syntaks brukes:

$ set -o errunset
$ set -e

Effekten er den samme.

For å deaktivere alternativet må du sette et pluss i stedet for et minus:

$ set +e

I lang tid kunne jeg ikke huske denne syntaksen fordi logikken virket feil (et minustegn aktiverer alternativet, og et plusstegn deaktiverer det).

В shopt (mer logiske) flagg brukes til å aktivere og deaktivere alternativer -s (sett) og -u (ikke innstilt):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Bytte kataloger

Det er flere alternativer som hjelper deg med å jobbe med kataloger.

1.cdspell

Med denne innstillingen vil bash begynne å forstå skrivefeil og ta deg til mappen hvis navn du skrev feil.

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

Jeg har brukt dette alternativet i mange år og svært sjelden (kanskje en gang i året) tar det en veldig merkelig avgjørelse. Men på andre dager cdspell sparer tid, bokstavelig talt hver dag.

2. autocd

Hvis du ikke er villig til å akseptere ineffektiviteten til flere oppføringer cd, så kan du sette dette alternativet til å flytte til X-mappen hvis X-kommandoen ikke eksisterer.

$ shopt -s autocd
$ abcdefg
$ cd ..

Kombinert med autofullføring lar dette deg raskt hoppe mellom mapper:

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

Bare ikke navngi mappen rm -rf * (ja, dette er forresten mulig).

3.direxpand

Dette er et kult alternativ som utvider miljøvariabler ved å trykke 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 utgang

4. sjekkjobber

Dette alternativet slutter å logge ut av økten hvis det fortsatt kjører jobber i bakgrunnen.

I stedet for å avslutte, vises en liste over uferdige oppgaver. Hvis du fortsatt vil avslutte, skriv inn igjen 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 процесса  изменился

Substitusjonssupermakter

5.globstar

Dette alternativet gir deg substitusjonssuperkrefter! Hvis du skriver inn:

$ shopt -s globstar
$ ls **

så vil skallet vise alle kataloger og underkataloger rekursivt.

I forbindelse med direxpand Du kan raskt se alt lavere i hierarkiet:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Dette alternativet aktiverer funksjoner som oftere er assosiert med regulære uttrykk. Noen ganger er dette veldig nyttig:

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

Her er mønstrene plassert i parentes og atskilt med en vertikal strek. Her er de tilgjengelige operatørene:

? = samsvarer med null eller én forekomst av de gitte mønstrene
! = vis alt som ikke stemmer med de gitte mønstrene
* = null eller flere forekomster
+ = en eller flere forekomster
@ = nøyaktig én forekomst

Ulykkesbeskyttelse

7. histverifisere

Det kan være litt skummelt til å begynne med å bruke hurtigstartkommandoene fra historien til forkortelser !! и !$.

alternativ histverify lar deg først se hvordan Bash tolker kommandoen før den faktisk kjører:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

Igjen, for å beskytte mot ulykker, nemlig fra å overskrive en fil som allerede eksisterer med omdirigeringsoperatøren (>). Dette kan være en katastrofe hvis du ikke har en sikkerhetskopi.

alternativ set -С forbyr slik overskriving. Om nødvendig kan du omgå beskyttelsen ved hjelp av operatøren >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

Kilde: www.habr.com

Legg til en kommentar