Sette variabili Bash sorprendenti

Continuando la serie di appunti su funzioni meno conosciute bash, vi mostrerò sette variabili di cui potreste non essere a conoscenza. PROMPT_COMMAND

1) COMANDO_DEL_PROMPT

Forse già sapete come manipolare il prompt per visualizzare informazioni utili, ma non tutti sanno che ad ogni volta che il prompt viene mostrato, è possibile eseguire un comando della shell.

In realtà, molti sofisticati manipolatori del prompt utilizzano questa variabile per eseguire comandi che raccolgono informazioni da visualizzare nel prompt.

Provate a eseguire questo in una nuova shell e vedrete cosa succede alla sessione:

$ PROMPT_COMMAND='echo -n "scrivendo il prompt a " && date'

2) HISTTIMEFORMAT

Se eseguite history nella console, otterrete un elenco di comandi precedentemente eseguiti sotto il vostro account.

$ HISTTIMEFORMAT='Ho eseguito questo il: %d/%m/%y %T '

Una volta impostata questa variabile, i nuovi record registrano il tempo insieme al comando, quindi l'output apparirà così:

1871  Ho eseguito questo il: 01/05/19 13:38:07 cat /etc/resolv.conf
1872  Ho eseguito questo il: 01/05/19 13:38:19 curl bbc.co.uk
1873  Ho eseguito questo il: 01/05/19 13:38:41 sudo vi /etc/resolv.conf
1874  Ho eseguito questo il: 01/05/19 13:39:18 curl -vvv bbc.co.uk
1876  Ho eseguito questo il: 01/05/19 13:39:25 sudo su -

Il formato corrisponde ai simboli di man date.

3) CDPATH

Per risparmiare tempo nella riga di comando, puoi utilizzare questa variabile per cambiare directory con la stessa facilità con cui chiami i comandi.

Come PATH, la variabile CDPATH rappresenta un elenco di percorsi separati da due punti. Quando esegui un comando cd con un percorso relativo (cioè senza slash all'inizio), la shell cerca per impostazione predefinita i nomi corrispondenti nella tua cartella locale. CDPATH cercherà nei percorsi che hai fornito per la directory a cui desideri accedere.

Se imposti CDPATH in questo modo:

$ CDPATH=/:/lib

e poi inserisci:

$ cd /home
$ cd tmp

allora arriverai sempre a /tmp indipendentemente da dove ti trovi.

Tuttavia, fai attenzione, perché se non inserisci la directory locale nella lista (.) non potrai creare nessun'altra cartella tmp e accedervi come al solito:

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

Ops!

Sembra una confusione, che ho provato quando ho capito che la cartella locale non era stata inclusa nella variabile più familiare PATH… ma devi farlo nella variabile PATH, perché potresti essere ingannato eseguendo un comando falso da qualche codice scaricato.

Il mio si imposta come punto di partenza:

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

4) SHLVL

Hai mai pensato che il comando exit ti porterà fuori dall'attuale shell bash in un'altra shell "genitore" o semplicemente chiuderà completamente la finestra del terminale?

Questa variabile tiene traccia di quanto sei profondo nella shell bash. Se crei un nuovo terminale, è impostata su 1:

$ echo $SHLVL
1

Poi, se lanci un altro processo della shell, il numero aumenta:

$ bash
$ echo $SHLVL
2

Questo può essere molto utile negli script, dove non sei sicuro se uscire o meno, o per tenere traccia di dove ti trovi nella gerarchia.

5) LINENO

La variabile utile per analizzare lo stato attuale e il debugging è LINENO, che indica il numero di comandi eseguiti nella sessione fino ad ora:

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

Questo è più frequentemente usato durante il debugging degli script. Inserendo righe come echo DEBUG:$LINENO, puoi rapidamente determinare dove ti trovi nello script (o meno).

6) REPLY

Se, come me, di solito scrivi codice del genere:

$ read input
echo do something with $input

potrebbe sorprenderti che non devi preoccuparti di creare una variabile:

$ read
echo do something with $REPLY

Questo fa la stessa cosa.

7) TMOUT

Per non rimanere troppo a lungo sui server di produzione a scopo di sicurezza o per non avviare accidentalmente qualcosa di rischioso nel terminale sbagliato, l'impostazione di questa variabile funge da protezione.

Se non viene digitato nulla per un numero preimpostato di secondi, avviene l'uscita dalla shell.

Cioè, è un'alternativa sleep 1 && exit:

$ TMOUT=1

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster