Poursuivant la série de notes sur
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