Sept variables Bash inattendues

Poursuivant la série de notes sur moins connu fonctions bash, je vais vous montrer sept variables que vous ne connaissez peut-être pas.

1) PROMPT_COMMAND

Vous savez peut-être déjà comment manipuler l'invite pour afficher diverses informations utiles, mais tout le monde ne sait pas que vous pouvez exécuter une commande shell à chaque fois que l'invite est affichée.

En fait, de nombreux manipulateurs d'invites complexes utilisent cette variable pour exécuter des commandes afin de collecter les informations affichées dans l'invite.

Essayez de l'exécuter dans un nouveau shell et voyez ce qui arrive à la session :

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

2) HISTTIMEFORMAT

Si tu cours history dans la console, vous recevrez une liste des commandes précédemment exécutées sous votre compte.

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

Une fois cette variable définie, les nouvelles entrées enregistrent l'heure avec la commande, le résultat ressemblera donc à ceci :

1871 J'ai exécuté ceci à : 01/05/19 13:38:07 cat /etc/resolv.conf 1872 J'ai exécuté ceci à : 01/05/19 13:38:19 curl bbc.co.uk 1873 J'ai exécuté ceci à : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 J'ai exécuté ceci à : 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 J'ai exécuté ceci à : 01 /05/19 13:39:25 sudo su -

Le formatage correspond aux caractères de man date.

3) CDPATH

Pour gagner du temps sur la ligne de commande, vous pouvez utiliser cette variable pour changer de répertoire aussi facilement que vous exécutez des commandes.

Comme PATH, variable CDPATH est une liste de chemins séparés par des deux-points. Lorsque vous exécutez la commande cd avec un chemin relatif (c'est-à-dire sans barre oblique), par défaut, le shell recherche dans votre dossier local les noms correspondants. CDPATH recherchera dans les chemins que vous avez indiqués le répertoire auquel vous souhaitez accéder.

Si vous installez CDPATH donc:

$ CDPATH=/:/lib

puis entrez :

$ cd /home
$ cd tmp

alors tu finiras toujours dans /tmp peu importe où vous êtes.

Attention cependant, car si vous ne précisez pas le local dans la liste (.), vous ne pourrez alors créer aucun autre dossier tmp et allez-y comme d'habitude :

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

Oups!

Ceci est similaire à la confusion que j'ai ressentie lorsque j'ai réalisé que le dossier local n'était pas inclus dans la variable plus familière. PATH... mais vous devez le faire dans votre variable PATH car vous pourriez être amené à exécuter une fausse commande à partir d'un code téléchargé.

Le mien est défini par le point de départ :

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

4) SHLVL

Vous êtes-vous déjà demandé en tapant exit cela vous fera-t-il sortir de votre shell bash actuel vers un autre shell « parent », ou fermera-t-il simplement complètement la fenêtre de la console ?

Cette variable garde une trace de la profondeur de votre imbrication dans le shell bash. Si vous créez un nouveau terminal, il est mis à 1 :

$ echo $SHLVL
1

Ensuite, si vous démarrez un autre processus shell, le nombre augmente :

$ bash
$ echo $SHLVL
2

Cela peut être très utile dans les scripts dans lesquels vous ne savez pas si vous devez quitter ou non, ou pour savoir où vous êtes imbriqué.

5) LINENO

La variable est également utile pour analyser l'état actuel et le débogage LINENO, qui indique le nombre de commandes exécutées jusqu'à présent dans la session :

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

Ceci est le plus souvent utilisé lors du débogage de scripts. Insérer des lignes comme echo DEBUG:$LINENO, vous pouvez rapidement déterminer où vous vous trouvez (ou non) dans le script.

6) REPLY

Si, comme moi, vous écrivez habituellement du code comme celui-ci :

$ read input
echo do something with $input

Il peut être surprenant que vous n'ayez pas du tout à vous soucier de la création de la variable :

$ read
echo do something with $REPLY

Cela fait la même chose.

7) TMOUT

Pour éviter de rester trop longtemps sur les serveurs de production pour des raisons de sécurité ou d'exécuter accidentellement quelque chose de dangereux dans le mauvais terminal, la définition de cette variable agit comme une protection.

Si rien n'est saisi pendant un nombre défini de secondes, le shell se termine.

Autrement dit, c'est une alternative sleep 1 && exit:

$ TMOUT=1

Source: habr.com

Ajouter un commentaire