Sedem nepričakovanih spremenljivk Bash

Nadaljevanje niza zapiskov o manj znani funkcije bash, pokazal ti bom sedem spremenljivk, za katere morda ne veš.

1) PROMPT_COMMAND

Morda že veste, kako manipulirati s pozivom za prikaz različnih uporabnih informacij, vendar vsi ne vedo, da lahko zaženete lupinski ukaz vsakič, ko se prikaže poziv.

Pravzaprav veliko zapletenih manipulatorjev pozivov uporablja to spremenljivko za izvajanje ukazov za zbiranje informacij, ki so prikazane v pozivu.

Poskusite to zagnati v novi lupini in poglejte, kaj se zgodi s sejo:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Če tečeš history v konzoli boste prejeli seznam ukazov, ki so bili predhodno izvedeni pod vašim računom.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Ko je ta spremenljivka nastavljena, novi vnosi zabeležijo čas skupaj z ukazom, zato bo rezultat videti takole:

1871 To sem zagnal na: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 To sem pognal na: 01/05/19 13:38:19 curl bbc.co.uk 1873 To sem pognal na : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 To sem zagnal na: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 To sem pognal na: 01 /05/19 13:39:25 sudo su -

Oblikovanje se ujema z znaki iz man date.

3) CDPATH

Če želite prihraniti čas v ukazni vrstici, lahko uporabite to spremenljivko za spreminjanje imenikov tako enostavno, kot izdajate ukaze.

Kot PATH, spremenljivka CDPATH je z dvopičjem ločen seznam poti. Ko zaženete ukaz cd z relativno potjo (tj. brez začetne poševnice), lupina privzeto išče ujemajoča se imena v vaši lokalni mapi. CDPATH bo iskal po poteh, ki ste jih podali za imenik, v katerega želite iti.

Če namestite CDPATH na ta način:

$ CDPATH=/:/lib

in nato vnesite:

$ cd /home
$ cd tmp

potem boš vedno končal v /tmp ne glede na to kje si.

Vendar bodite previdni, saj če na seznamu ne navedete lokalnega (.), potem ne boste mogli ustvariti nobene druge mape tmp in pojdite na to kot običajno:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Ups!

To je podobno zmedi, ki sem jo občutil, ko sem ugotovil, da lokalna mapa ni vključena v bolj poznano spremenljivko PATH... vendar morate to storiti v svoji spremenljivki PATH, ker bi vas lahko prevarali, da bi zagnali lažni ukaz iz neke prenesene kode.

Moj je določen z izhodiščem:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Ste se kdaj vprašali, tipkanje exit vas bo popeljal iz vaše trenutne lupine bash v drugo "starševsko" lupino ali pa bo popolnoma zaprl okno konzole?

Ta spremenljivka spremlja, kako globoko ste ugnezdeni v lupini bash. Če ustvarite nov terminal, je nastavljen na 1:

$ echo $SHLVL
1

Potem, če začnete drug postopek lupine, se število poveča:

$ bash
$ echo $SHLVL
2

To je lahko zelo uporabno pri skriptih, pri katerih niste prepričani, ali bi zapustili ali ne, ali spremljate, kje ste ugnezdeni.

5) LINENO

Spremenljivka je uporabna tudi za analizo trenutnega stanja in odpravljanje napak LINENO, ki poroča o številu dosedanjih izvedenih ukazov v seji:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

To se najpogosteje uporablja pri odpravljanju napak v skriptih. Vstavljanje vrstic, kot je echo DEBUG:$LINENO, lahko hitro ugotovite, kje v scenariju ste (ali ne).

6) REPLY

Če kot jaz običajno pišete kodo takole:

$ read input
echo do something with $input

Morda bo presenetljivo, da vam sploh ni treba skrbeti za ustvarjanje spremenljivke:

$ read
echo do something with $REPLY

To naredi isto.

7) TMOUT

Da preprečite predolgo bivanje na produkcijskih strežnikih zaradi varnosti ali nenamerno izvajanje nevarnega v napačnem terminalu, nastavitev te spremenljivke deluje kot zaščita.

Če nastavljeno število sekund ne vnesete ničesar, lupina zapusti.

Se pravi, to je alternativa sleep 1 && exit:

$ TMOUT=1

Vir: www.habr.com

Dodaj komentar