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