Sette variabili Bash inaspettate

Continuando la serie di note su meno conosciuto funzioni bash, ti mostrerò sette variabili di cui potresti non essere a conoscenza.

1) PROMPT_COMMAND

Potresti già sapere come manipolare il prompt per mostrare varie informazioni utili, ma non tutti sanno che puoi eseguire un comando di shell ogni volta che viene mostrato il prompt.

In effetti, molti manipolatori di prompt complessi utilizzano questa variabile per eseguire comandi per raccogliere informazioni visualizzate nel prompt.

Prova a eseguirlo in una nuova shell e guarda cosa succede alla sessione:

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

2) HISTTIMEFORMAT

Se corri history nella console riceverai un elenco dei comandi precedentemente eseguiti sul tuo account.

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

Una volta impostata questa variabile, le nuove voci registrano l'ora insieme al comando, quindi l'output sarà simile a questo:

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

La formattazione corrisponde ai caratteri di man date.

3) CDPATH

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

Come PATH, variabile CDPATH è un elenco di percorsi separati da due punti. Quando esegui il comando cd con un percorso relativo (cioè senza barra iniziale), per impostazione predefinita la shell cerca nella cartella locale i nomi corrispondenti. CDPATH cercherà nei percorsi che hai fornito la directory a cui vuoi andare.

Se installi CDPATH in questo modo:

$ CDPATH=/:/lib

e poi inserisci:

$ cd /home
$ cd tmp

allora finirai sempre dentro /tmp non importa dove tu sia.

Fai però attenzione, perché se non specifichi quello locale nell'elenco (.), non sarà possibile creare nessun'altra cartella tmp e vai come al solito:

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

Oops!

Questo è simile alla confusione che ho provato quando mi sono reso conto che la cartella locale non era inclusa nella variabile più familiare PATH... ma devi farlo nella tua variabile PATH perché potresti essere indotto a eseguire un comando falso da qualche codice scaricato.

Il mio è impostato dal punto di partenza:

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

4) SHLVL

Ti sei mai chiesto, digitando exit ti porterà fuori dalla tua attuale shell bash su un'altra shell "genitore" o chiuderà semplicemente completamente la finestra della console?

Questa variabile tiene traccia di quanto profondamente sei annidato nella shell bash. Se crei un nuovo terminale, viene impostato su 1:

$ echo $SHLVL
1

Quindi, se avvii un altro processo di shell, il numero aumenta:

$ bash
$ echo $SHLVL
2

Questo può essere molto utile negli script in cui non sei sicuro se uscire o meno o tenere traccia di dove sei nidificato.

5) LINENO

La variabile è utile anche per analizzare lo stato corrente ed eseguire il debug LINENO, che riporta il numero di comandi eseguiti finora nella sessione:

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

Questo viene spesso utilizzato durante il debug degli script. Inserimento di righe come echo DEBUG:$LINENO, puoi determinare rapidamente dove ti trovi (o meno) nello script.

6) REPLY

Se, come me, di solito scrivi codice in questo modo:

$ read input
echo do something with $input

Potrebbe sorprendere il fatto che non devi preoccuparti affatto di creare la variabile:

$ read
echo do something with $REPLY

Questo fa la stessa cosa.

7) TMOUT

Per evitare di rimanere troppo a lungo sui server di produzione per motivi di sicurezza o di eseguire accidentalmente qualcosa di pericoloso nel terminale sbagliato, l'impostazione di questa variabile funge da protezione.

Se non viene inserito nulla per un determinato numero di secondi, la shell esce.

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

$ TMOUT=1

Fonte: habr.com

Aggiungi un commento