Sep neatenditaj Bash-variabloj

Daŭrigante la serion de notoj pri malpli konataj funkcioj bash, mi montros al vi sep variablojn, pri kiuj vi eble ne scias.

1) PROMPT_COMMAND

Vi eble jam scias kiel manipuli la promptilon por montri diversajn utilajn informojn, sed ne ĉiuj scias, ke vi povas ruli ŝelan komandon ĉiufoje kiam la prompto montriĝas.

Fakte, multaj kompleksaj promptaj manipulantoj uzas ĉi tiun variablon por ekzekuti komandojn por kolekti informojn, kiuj estas montrataj en la prompto.

Provu ruli ĉi tion en nova ŝelo kaj vidu kio okazas al la sesio:

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

2) HISTTIMEFORMAT

Se vi kuras history en la konzolo, vi ricevos liston de komandoj antaŭe ekzekutitaj sub via konto.

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

Post kiam ĉi tiu variablo estas agordita, novaj eniroj registras la tempon kune kun la komando, do la eligo aspektos jene:

1871 Mi prizorgis ĉi tion ĉe: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Mi kuris ĉi tion ĉe: 01/05/19 13:38:19 curl bbc.co.uk 1873 Mi kuris ĉi tion ĉe: : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Mi kuris ĉi tion ĉe: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Mi kuris ĉi tion ĉe: 01 /05/19 13:39:25 sudo su -

Formatado kongruas kun signoj de man date.

3) CDPATH

Por ŝpari tempon en la komandlinio, vi povas uzi ĉi tiun variablon por ŝanĝi dosierujojn tiel facile kiel vi eldonas ordonojn.

Tiel kiel ankaŭ PATH, varia CDPATH estas dupunkto-disigita listo de vojoj. Kiam vi rulas la komandon cd kun relativa vojo (t.e. sen gvida oblikvo), defaŭlte la ŝelo serĉas kongruajn nomojn en via loka dosierujo. CDPATH serĉos en la vojoj kiujn vi donis por la dosierujo, al kiu vi volas iri.

Se vi instalas CDPATH tiel:

$ CDPATH=/:/lib

kaj poste enigu:

$ cd /home
$ cd tmp

tiam vi ĉiam finiĝos en /tmp ne gravas kie vi estas.

Tamen atentu, ĉar se vi ne specifas la lokan en la listo (.) dosierujo, tiam vi ne povos krei alian dosierujon tmp kaj iru al ĝi kiel kutime:

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

Ho!

Ĉi tio similas al la konfuzo, kiun mi sentis, kiam mi rimarkis, ke la loka dosierujo ne estis inkluzivita en la pli konata variablo PATH... sed vi devas fari ĝin en via PATH-variablo ĉar vi povus esti trompita por ruli falsan komandon de iu elŝutita kodo.

La mia estas fiksita per la deirpunkto:

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

4) SHLVL

Ĉu vi iam scivolis, tajpante exit ĉu ĝi prenos vin el via nuna bash-ŝelo al alia "gepatra" ŝelo, aŭ ĉu ĝi simple fermos la konzolan fenestron tute?

Ĉi tiu variablo kontrolas kiom profunde nestitaj vi estas en la bash-ŝelo. Se vi kreas novan terminalon, ĝi estas agordita al 1:

$ echo $SHLVL
1

Tiam, se vi komencas alian ŝelprocezon, la nombro pliiĝas:

$ bash
$ echo $SHLVL
2

Ĉi tio povas esti tre utila en skriptoj, kie vi ne certas ĉu eliri aŭ ne, aŭ konservi trakon de kie vi estas enigita.

5) LINENO

La variablo ankaŭ utilas por analizi la nunan staton kaj sencimigi LINENO, kiu raportas la nombron da komandoj ekzekutitaj en la sesio ĝis nun:

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

Ĉi tio estas plej ofte uzata dum elpurigado de skriptoj. Enmetante liniojn kiel echo DEBUG:$LINENO, vi povas rapide determini kie en la skripto vi estas (aŭ ne).

6) REPLY

Se, kiel mi, vi kutime skribas kodon tiel:

$ read input
echo do something with $input

Eble surprizas, ke vi tute ne bezonas zorgi pri kreado de la variablo:

$ read
echo do something with $REPLY

Ĉi tio faras la samon.

7) TMOUT

Por eviti resti tro longe sur produktaj serviloj pro sekurecaj kialoj aŭ hazarde ruli ion danĝeran en malĝusta terminalo, agordi ĉi tiun variablon funkcias kiel protekto.

Se nenio estas enigita dum difinita nombro da sekundoj, la ŝelo eliras.

Tio estas, ĉi tio estas alternativo sleep 1 && exit:

$ TMOUT=1

fonto: www.habr.com

Aldoni komenton