Sân ûnferwachte Bash fariabelen

Trochgean fan de rige oantekeningen oer minder bekend funksjes bash, Ik sil dy sjen litte sân fariabelen jo miskien net witte oer.

1) PROMPT_COMMAND

Jo kinne al witte hoe't jo de prompt manipulearje om ferskate nuttige ynformaasje te sjen, mar net elkenien wit dat jo elke kear in shell-kommando kinne útfiere as de prompt wurdt werjûn.

Yn feite brûke in protte komplekse promptmanipulators dizze fariabele om kommando's út te fieren om ynformaasje te sammeljen dy't werjûn wurdt yn 'e prompt.

Besykje dit yn in nije shell út te fieren en sjoch wat der bart mei de sesje:

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

2) HISTTIMEFORMAT

As jo ​​rinne history yn 'e konsole krije jo in list mei kommando's dy't earder útfierd binne ûnder jo akkount.

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

Sadree't dizze fariabele is ynsteld, registrearje nije yngongen de tiid tegearre mei it kommando, sadat de útfier der sa útsjen sil:

1871 Ik rûn dit op: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Ik rûn dit op: 01/05/19 13:38:19 curl bbc.co.uk 1873 Ik rûn dit op : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Ik rûn dit op: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Ik rûn dit op: 01 /05/19 13:39:25 sudo su -

Opmaak komt oerien mei tekens fan man date.

3) CDPATH

Om tiid op 'e kommandorigel te besparjen, kinne jo dizze fariabele brûke om mappen sa maklik te feroarjen as jo kommando's útjaan.

Ek al PATH, fariabele CDPATH is in kolon-skieden list fan paden. As jo ​​​​it kommando útfiere cd mei in relatyf paad (dus gjin liedende slash), standert sjocht de shell yn jo lokale map foar oerienkommende nammen. CDPATH sil sykje yn 'e paden dy't jo joegen foar de map wêr't jo nei wolle gean.

As jo ​​ynstallearje CDPATH dus:

$ CDPATH=/:/lib

en dan ynfiere:

$ cd /home
$ cd tmp

dan komme jo altyd yn /tmp gjin saak wêr't jo binne.

Wês lykwols foarsichtich, want as jo de lokale net opjaan yn 'e list (.) map, dan kinne jo gjin oare map oanmeitsje tmp en gean nei it as gewoanlik:

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

Oops!

Dit is gelyk oan de betizing dy't ik fielde doe't ik realisearre dat de lokale map net opnommen wie yn 'e mear bekende fariabele PATH... mar jo moatte it dwaan yn jo PATH-fariabele, om't jo miskien wurde ferrifelje om in falsk kommando út te fieren fan wat ynladen koade.

Myn wurdt ynsteld troch it begjinpunt:

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

4) SHLVL

Hawwe jo oait ôffrege, typen exit sil it jo út jo hjoeddeistige bash-shell nei in oare "âlder"-shell bringe, of sil it it konsolefinster gewoan slute?

Dizze fariabele hâldt by hoe djip nêst jo binne yn 'e bash-shell. As jo ​​in nije terminal oanmeitsje, is it ynsteld op 1:

$ echo $SHLVL
1

Dan, as jo in oar shellproses begjinne, nimt it oantal ta:

$ bash
$ echo $SHLVL
2

Dit kin heul nuttich wêze yn skripts wêr't jo net wis binne oft jo moatte ôfslute of net, of byhâlde wêr't jo binne nestele.

5) LINENO

De fariabele is ek nuttich foar it analysearjen fan de aktuele steat en debuggen LINENO, dy't rapportearret it oantal kommando's útfierd yn 'e sesje oant no ta:

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

Dit wurdt meast brûkt by it debuggen fan skripts. Ynfoegje rigels lykas echo DEBUG:$LINENO, kinne jo fluch bepale wêr yn it skript jo binne (of net).

6) REPLY

As jo, lykas ik, normaal koade sa skriuwe:

$ read input
echo do something with $input

It kin as in ferrassing komme dat jo hielendal gjin soargen hoege te meitsjen oer it meitsjen fan de fariabele:

$ read
echo do something with $REPLY

Dit docht itselde ding.

7) TMOUT

Om foar te kommen dat jo om feiligensredenen te lang op produksjeservers bliuwe of per ongelok wat gefaarliks ​​útfiere yn 'e ferkearde terminal, fungearret it ynstellen fan dizze fariabele as beskerming.

As neat wurdt ynfierd foar in set oantal sekonden, de shell giet út.

Dat is, dit is in alternatyf sleep 1 && exit:

$ TMOUT=1

Boarne: www.habr.com

Add a comment