Sept variables Bash inattendues

Poursuivant avec une série de notes sur les fonctions bash moins connues , 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 d'invite pour afficher diverses informations utiles, mais tout le monde ne sait pas que vous pouvez exécuter une commande shell à chaque fois que vous affichez l'invite.

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

Essayez de l'exécuter dans un nouveau shell et vous verrez ce qui se passe avec la session:

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

2) HISTTIMEFORMAT


Si vous exécutez l' history dans la console, vous obtiendrez une liste des commandes précédemment exécutées sous votre compte.

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

Dès que cette variable est définie, de nouveaux enregistrements enregistrent le temps avec la commande, donc la sortie ressemblera à ceci:

 1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su - 

Le formatage correspond aux caractères de la date de l'homme.

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 appelez des commandes.

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

Si vous installez CDPATH cette façon:

 $ CDPATH=/:/lib 

puis entrez:

 $ cd /home $ cd tmp 

alors vous serez toujours dans /tmp où que vous soyez.

Cependant, soyez prudent, car si vous ne spécifiez pas de dossier local ( . ) Dans la liste, vous ne pouvez pas créer d'autre dossier tmp et y accéder, 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 PATH plus familière ... mais vous devez le faire dans la variable PATH car vous pouvez être trompé en exécutant une fausse commande à partir d'un code téléchargé.

Mon 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é si l'entrée exit ferait sortir du shell bash actuel vers un autre shell «parent» ou fermerait complètement la fenêtre de la console?

Cette variable garde une trace de la profondeur à laquelle vous êtes intégré dans le shell bash. Si vous créez un nouveau terminal, il est défini sur 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 où vous ne savez pas s'il faut quitter ou non, ou pour suivre où vous en êtes en imbriquant.

5) LINENO


De plus, pour analyser l'état actuel et le débogage, la variable LINENO est LINENO , qui indique le nombre de commandes exécutées dans la session à ce jour:

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

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

6) REPLY


Si, comme moi, vous écrivez généralement du code comme celui-ci:

 $ read input echo do something with $input 

il peut être surprenant que vous n'ayez pas à vous soucier de créer une variable:

 $ read echo do something with $REPLY 

C'est la même chose.

7) TMOUT


Afin de ne pas 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 sert de protection.

Si rien n'est entré dans le nombre de secondes défini, le shell se ferme.

Autrement dit, ceci est une alternative à sleep 1 && exit :

 $ TMOUT=1 

Source: https://habr.com/ru/post/fr451492/


All Articles