Dažas Bash iespējas ir labi zināmas un bieži izmantotas. Piemēram, daudzi cilvēki raksta scenārija sākumā
iestatiet -o xtrace
atkļūdošanai,
set -o errexit
lai izietu kļūdas dēļ vai
set -o errunset
lai izietu, ja izsauktais mainīgais nav iestatīts.
Bet ir daudz citu iespēju. Dažkārt manās tie ir aprakstīti pārāk mulsinoši, tāpēc šeit esmu apkopojis dažus noderīgākos ar paskaidrojumiem.
Piezīme. Mac datoriem var būt vecāka bash versija (3.x, nevis 4.x), kur visas šīs opcijas nav pieejamas. Šajā gadījumā sk
set
vai shopt
?
Ir divi veidi, kā iestatīt bash opcijas: no skripta vai komandrindas. Varat izmantot iebūvētās komandas set
и shopt
. Abi maina čaulas uzvedību, dara gandrīz vienu un to pašu (ar dažādiem argumentiem), taču atšķiras savā ziņā set
ir mantoti vai aizgūti no citu čaulu parametriem, savukārt parametri shopt
izveidots bash.
Ja vēlaties redzēt pašreizējās opcijas, palaidiet:
$ set -o
$ shopt
Lai aktivizētu opciju, ievadiet set
Tiek izmantota gara vai īsa sintakse:
$ set -o errunset
$ set -e
Efekts ir tāds pats.
Lai atspējotu opciju, mīnusa vietā jāievieto pluss:
$ set +e
Ilgu laiku es nevarēju atcerēties šo sintaksi, jo loģika šķita nepareiza (mīnusa zīme iespējo opciju, un plus zīme to atspējo).
В shopt
(loģiskāki) karodziņi tiek izmantoti, lai iespējotu un atspējotu opcijas -s
(komplekts) un -u
(atiestatīts):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Katalogu maiņa
Ir vairākas iespējas, kas palīdz strādāt ar direktorijiem.
1.cdspell
Izmantojot šo iestatījumu, bash sāks saprast drukas kļūdas un novirzīs jūs uz mapi, kuras nosaukumu esat uzrakstījis nepareizi.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Es izmantoju šo iespēju daudzus gadus un ļoti reti (varbūt reizi gadā) tas pieņem ļoti dīvainu lēmumu. Bet citās dienās cdspell
ietaupa laiku, burtiski katru dienu.
2. autocd
Ja nevēlaties samierināties ar vairāku ierakstu neefektivitāti cd
, tad varat iestatīt šo opciju, lai pārietu uz mapi X, ja X komanda neeksistē.
$ shopt -s autocd
$ abcdefg
$ cd ..
Apvienojumā ar automātisko pabeigšanu, tas ļauj ātri pārslēgties starp mapēm:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Vienkārši nenosauciet mapi rm -rf *
(jā, starp citu, tas ir iespējams).
3.virzpaplašināt
Šī ir lieliska iespēja, kas paplašina vides mainīgos, nospiežot tabulēšanas taustiņu:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
tīra izvade
4. kontroldarbi
Šī opcija aptur atteikšanos no sesijas, ja fonā joprojām darbojas darbi.
Tā vietā, lai izietu, tiek parādīts nepabeigto uzdevumu saraksts. Ja joprojām vēlaties iziet, ievadiet vēlreiz 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 процесса изменился
Aizstāšanas lielvaras
5.globstar
Šī opcija sniedz jums aizstāšanas lielvaras! Ja ievadāt:
$ shopt -s globstar
$ ls **
tad apvalks rekursīvi parādīs visus direktorijus un apakšdirektorijus.
Kopā ar direxpand
Varat ātri skatīt visu, kas atrodas zemāk hierarhijā:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Šī opcija iespējo līdzekļus, kas biežāk tiek saistīti ar regulārām izteiksmēm. Dažreiz tas ir ļoti noderīgi:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Šeit raksti ir ievietoti iekavās un atdalīti ar vertikālu joslu. Šeit ir pieejamie operatori:
? = atbilst nullei vai vienam doto modeļu gadījumam! = parādīt visu, kas neatbilst dotajiem modeļiem * = nulle vai vairāki gadījumi + = viens vai vairāki gadījumi @ = tieši viens gadījums
Nelaimes gadījumu aizsardzība
7. histverify
Sākumā var būt nedaudz biedējoši izmantot ātrās palaišanas komandas no saīsinājumu vēstures !!
и !$
.
Opcija histverify
ļauj vispirms redzēt, kā Bašs interpretē komandu, pirms tā faktiski tiek palaista:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noklobārs
Atkal, lai aizsargātu pret negadījumiem, proti, no jau esoša faila pārrakstīšanas ar novirzīšanas operatoru (>
). Tā var būt katastrofa, ja jums nav rezerves.
Opcija set -С
aizliedz šādu pārrakstīšanu. Ja nepieciešams, jūs varat apiet aizsardzību, izmantojot operatoru >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Avots: www.habr.com