Set variables Bash inesperades

Continuant la sèrie de notes sobre menys conegut funcions bash, us mostraré set variables que potser no coneixeu.

1) PROMPT_COMMAND

És possible que ja sàpigues com manipular l'indicador per mostrar informació útil, però no tothom sap que pots executar una ordre d'intèrpret d'ordres cada vegada que es mostra l'indicador.

De fet, molts manipuladors d'indicadors complexos utilitzen aquesta variable per executar ordres per recopilar informació que es mostra a l'indicador.

Proveu d'executar-ho en un nou shell i mireu què passa amb la sessió:

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

2) HISTTIMEFORMAT

Si corres history a la consola, rebreu una llista d'ordres executades prèviament al vostre compte.

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

Un cop establerta aquesta variable, les noves entrades registren l'hora juntament amb l'ordre, de manera que la sortida es veurà així:

1871 Ho vaig executar a: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Ho vaig executar a: 01/05/19 13:38:19 curl bbc.co.uk 1873 Ho vaig executar a : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Vaig executar això a: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Ho vaig executar a: 01 /05/19 13:39:25 sudo su -

El format coincideix amb els caràcters de man date.

3) CDPATH

Per estalviar temps a la línia d'ordres, podeu utilitzar aquesta variable per canviar de directoris amb la mateixa facilitat que emeteu ordres.

com PATH, variable CDPATH és una llista de camins separats per dos punts. Quan executeu l'ordre cd amb un camí relatiu (és a dir, sense barra inclinada), de manera predeterminada, l'intèrpret d'ordres busca noms coincidents a la vostra carpeta local. CDPATH cercarà als camins que heu donat per al directori al qual voleu anar.

Si instal·leu CDPATH d'aquesta manera:

$ CDPATH=/:/lib

i després introduïu:

$ cd /home
$ cd tmp

llavors sempre hi acabaràs /tmp no importa on siguis.

Tanmateix, aneu amb compte, perquè si no especifiqueu el local a la llista (.), aleshores no podreu crear cap altra carpeta tmp i aneu-hi com de costum:

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

Vaja!

Això és similar a la confusió que vaig sentir quan em vaig adonar que la carpeta local no estava inclosa a la variable més familiar PATH... però ho heu de fer a la vostra variable PATH perquè és possible que us enganyin per executar una ordre falsa des d'algun codi descarregat.

El meu està establert pel punt de partida:

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

4) SHLVL

T'has preguntat mai, escrivint exit us portarà del vostre intèrpret d'ordres bash actual a un altre intèrpret d'ordres "parent" o tancarà completament la finestra de la consola?

Aquesta variable fa un seguiment de la profunditat que esteu imbricats a l'intèrpret d'ordres bash. Si creeu un terminal nou, s'estableix en 1:

$ echo $SHLVL
1

Aleshores, si inicieu un altre procés de shell, el nombre augmenta:

$ bash
$ echo $SHLVL
2

Això pot ser molt útil en els scripts on no esteu segurs de sortir o no, o de fer un seguiment d'on esteu imbricats.

5) LINENO

La variable també és útil per analitzar l'estat actual i depurar LINENO, que informa del nombre d'ordres executades a la sessió fins ara:

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

Això s'utilitza més sovint quan es depuren scripts. Inserint línies com echo DEBUG:$LINENO, podeu determinar ràpidament on us trobeu (o no) a l'script.

6) REPLY

Si, com jo, normalment escriviu codi com aquest:

$ read input
echo do something with $input

Pot ser una sorpresa que no us hàgiu de preocupar per crear la variable:

$ read
echo do something with $REPLY

Això fa el mateix.

7) TMOUT

Per evitar romandre massa temps als servidors de producció per motius de seguretat o executar accidentalment quelcom perillós al terminal equivocat, establir aquesta variable actua com a protecció.

Si no s'introdueix res durant un nombre determinat de segons, el shell surt.

És a dir, aquesta és una alternativa sleep 1 && exit:

$ TMOUT=1

Font: www.habr.com

Afegeix comentari