Astoņas mazpazīstamas Bash iespējas

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 šeit vai šeit.

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ņā izcelsmi... Iespējas 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

Pievieno komentāru