Pitong hindi inaasahang mga variable ng Bash

Ang pagpapatuloy ng serye ng mga tala tungkol sa hindi gaanong kilala pagpapaandar bash, ipapakita ko sa iyo ang pitong variable na maaaring hindi mo alam.

1) PROMPT_COMMAND

Maaaring alam mo na kung paano manipulahin ang prompt upang magpakita ng iba't ibang kapaki-pakinabang na impormasyon, ngunit hindi alam ng lahat na maaari kang magpatakbo ng shell command sa tuwing ipinapakita ang prompt.

Sa katunayan, maraming kumplikadong prompt manipulator ang gumagamit ng variable na ito upang magsagawa ng mga command upang mangolekta ng impormasyon na ipinapakita sa prompt.

Subukang patakbuhin ito sa isang bagong shell at tingnan kung ano ang mangyayari sa session:

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

2) HISTTIMEFORMAT

Kung tatakbo ka history sa console, makakatanggap ka ng isang listahan ng mga command na dati nang naisagawa sa ilalim ng iyong account.

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

Kapag naitakda na ang variable na ito, itinatala ng mga bagong entry ang oras kasama ang command, kaya magiging ganito ang output:

1871 Pinatakbo ko ito sa: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Pinatakbo ko ito sa: 01/05/19 13:38:19 curl bbc.co.uk 1873 Pinatakbo ko ito sa: : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Pinatakbo ko ito sa: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Pinatakbo ko ito sa: 01 /05/19 13:39:25 sudo su -

Ang pag-format ay tumutugma sa mga character mula sa man date.

3) CDPATH

Upang makatipid ng oras sa command line, maaari mong gamitin ang variable na ito upang baguhin ang mga direktoryo nang kasingdali ng pag-isyu mo ng mga command.

bilang PATH, variable CDPATH ay isang listahan ng mga path na pinaghihiwalay ng tutuldok. Kapag pinatakbo mo ang utos cd na may kamag-anak na landas (i.e. walang nangungunang slash), bilang default ang shell ay tumitingin sa iyong lokal na folder para sa pagtutugma ng mga pangalan. CDPATH maghahanap sa mga landas na iyong ibinigay para sa direktoryo na gusto mong puntahan.

Kung nag-install ka CDPATH sa ganitong paraan:

$ CDPATH=/:/lib

at pagkatapos ay ipasok ang:

$ cd /home
$ cd tmp

pagkatapos ay palagi kang mapupunta /tmp kahit nasaan ka man.

Gayunpaman, mag-ingat, dahil kung hindi mo tinukoy ang lokal sa listahan (.) folder, pagkatapos ay hindi ka makakagawa ng anumang iba pang folder tmp at pumunta dito gaya ng dati:

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

Oops!

Ito ay katulad ng pagkalito na naramdaman ko nang mapagtanto ko na ang lokal na folder ay hindi kasama sa mas pamilyar na variable PATH... ngunit kailangan mong gawin ito sa iyong PATH variable dahil baka malinlang ka sa pagpapatakbo ng pekeng command mula sa ilang na-download na code.

Ang akin ay itinakda ng panimulang punto:

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

4) SHLVL

Naisip mo na ba, pagta-type exit dadalhin ka ba nito mula sa iyong kasalukuyang bash shell patungo sa isa pang "magulang" na shell, o isasara lang ba nito ang console window nang buo?

Sinusubaybayan ng variable na ito kung gaano ka kalalim ang nested sa bash shell. Kung gagawa ka ng bagong terminal, nakatakda ito sa 1:

$ echo $SHLVL
1

Pagkatapos, kung magsisimula ka ng isa pang proseso ng shell, tataas ang bilang:

$ bash
$ echo $SHLVL
2

Maaari itong maging lubhang kapaki-pakinabang sa mga script kung saan hindi ka sigurado kung lalabas o hindi, o subaybayan kung saan ka naka-nest.

5) LINENO

Kapaki-pakinabang din ang variable para sa pagsusuri sa kasalukuyang estado at pag-debug LINENO, na nag-uulat ng bilang ng mga utos na naisagawa sa session sa ngayon:

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

Ito ay kadalasang ginagamit kapag nagde-debug ng mga script. Pagpasok ng mga linya tulad ng echo DEBUG:$LINENO, mabilis mong matutukoy kung nasaan ka sa script (o hindi).

6) REPLY

Kung, tulad ko, karaniwan kang nagsusulat ng code na tulad nito:

$ read input
echo do something with $input

Maaaring dumating bilang isang sorpresa na hindi mo kailangang mag-alala tungkol sa paglikha ng variable sa lahat:

$ read
echo do something with $REPLY

Ginagawa nito ang parehong bagay.

7) TMOUT

Upang maiwasan ang pananatili sa mga server ng produksyon nang masyadong mahaba para sa mga kadahilanang pangseguridad o aksidenteng magpatakbo ng isang bagay na mapanganib sa maling terminal, ang pagtatakda ng variable na ito ay nagsisilbing proteksyon.

Kung walang ipinasok para sa isang itinakdang bilang ng mga segundo, lalabas ang shell.

Ibig sabihin, ito ay isang alternatibo sleep 1 && exit:

$ TMOUT=1

Pinagmulan: www.habr.com

Magdagdag ng komento