Septiņas negaidītas Bash mainīgās.

Turpinot piezīmju sēriju par mazāk zināmām funkcijām bash, es jums parādīšu septiņas mainīgās, par kurām jūs, iespējams, nezināt.

1) PROMPT_COMMAND

Iespējams, jūs jau zināt, kā manipulēt ar aicinājumu prompt, lai rādītu dažādu noderīgu informāciju, bet ne visi zina, ka katru reizi, kad tiek parādīts aicinājums, var izsaukt komandu.

Patiesībā daudzi sarežģīti aicinājuma manipulatori izmanto šo mainīgo, lai veiktu komandas informācijas vākšanai, kas tiek parādīta aicinājumā.

Mēģiniet to izpildīt jaunā shelā un redzēsiet, kas notiks ar sesiju:

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

2) HISTTIMEFORMAT

Ja izpilda history konsole, jūs saņemsiet iepriekš veikto komandu sarakstu, kas pieder pie jūsu konta.

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

Kad šis mainīgais ir iestatīts, jaunas ierakstas reģistrē laiku kopā ar komandu, tāpēc rezultāts izskatīsies šādi:

1871  I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf
1872  I ran this at: 01/05/19 13:38:19 curl bbc.co.uk
1873  I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf
1874  I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk
1876  I ran this at: 01/05/19 13:39:25 sudo su -

Formatējums atbilst simboliem no man date.

3) CDPATH

Lai ietaupītu laiku komandrindā, varat izmantot šo mainīgo, lai pārvietotos pa direktorijām tikpat viegli, kā izsaukt komandas.

Kā arī PATH, mainīgais CDPATH ir ceļu saraksts, kas atdalīts ar kolonnu. Kad jūs izsaucat komandu cd ar relatīvo ceļu (tas ir, bez slīpsvītras priekšā), noklusējuma shell meklē jūsu lokālajā mapē atbilstošos nosaukumus. CDPATH meklēs norādītajos ceļos, uz kuru vēlaties pāriet.

Ja iestādāt CDPATH šādā veidā:

$ CDPATH=/:/lib

un pēc tam ievadāt:

$ cd /home
$ cd tmp

tad jūs vienmēr nonāksiet /tmp neatkarīgi no tā, kur atrodaties.

Tomēr esiet uzmanīgi, jo, ja nesniegsiet lokālo (.) mapi sarakstā, tad jūs nevarēsiet izveidot nevienu citu mapi tmp un pāriet uz to kā parasti:

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

Ups!

Tas liecina par apjukumu, ko es izjutu, kad sapratu, ka lokālā mape nav iekļauta pazīstamajā mainīgajā PATH…bet jums jāizdara tas mainīgajā PATH, jo varat kļūdīties, izpildot viltotu komandu no kāda lejupielādēta koda.

Mana iestatāma sākumpunkts:

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

4) SHLVL

Vai jūs kādreiz esat domājuši, ievadot exit izvadīs jūs no pašreizējā bash čaulas uz citu "vecāku" čaulu vai vienkārši pilnībā aizvērs konsoles logu?

Šī mainīgā vērtība uzrauga, cik dziļi jūs esat iekļauts bash čaulā. Ja izveidosiet jaunu termināli, tā būs iestatīta uz 1:

$ echo $SHLVL
1

Pēc tam, ja palaižat citu čaulas procesu, skaitlis palielinās:

$ bash
$ echo $SHLVL
2

Tas var būt ļoti noderīgi skriptos, kur jūs neesat pārliecināts, vai iziet vai ne, vai uzraudzīt, kur jūs atrodaties dziļumā.

5) LINENO

Tāpat arī pašreizējā stāvokļa analīzei un atkļūdošanai noderīga ir mainīgā LINENO, kas norāda, cik komandas tika izpildītas sesijā līdz šim:

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

Tas visbiežāk tiek izmantots, veicot skriptu atkļūdošanu. Ievietojot tādas rindas kā echo DEBUG:$LINENO, jūs varat ātri noteikt, kur skriptā jūs atrodaties (vai ne).

6) REPLY

Ja, tāpat kā es, jūs parasti rakstāt šādu kodu:

$ read input
echo dari kaut ko ar $input

tad var būt pārsteigums, ka nav vispār jāuztraucas par mainīgā izveidi:

$ read
echo dari kaut ko ar $REPLY

Tas dara to pašu.

7) TMOUT

Lai nepavadītu pārāk ilgi produkcijas serveros drošības nolūkos vai nejauši nenoslogotu kaut ko bīstamu nepareizajā terminālī, šī mainīgā iestatīšana darbojas kā aizsardzība.

Ja netiek ievadīts nekas noteiktu sekunžu laikā, notiek iziešana no čaulas.

Tātad tas ir alternatīva sleep 1 && exit:

$ TMOUT=1

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster