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
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 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