3 Façons de modifier votre chemin sur la ligne de commande
La variable d’environnement PATH
est l’une des parties les plus importantes de l’utilisation de la ligne de commande sous Linux. Sur un système moderne, c’est souvent une très longue chaîne de répertoires tous séparés par des deux-points. Si vous souhaitez modifier un élément de votre chemin d’accès, il peut être ennuyeux de devoir taper et modifier un grand nombre de noms de répertoires différents pour que tout soit correct. Heureusement, il existe quelques moyens de vous faciliter la tâche. Il en va de même pour toute variable d’environnement et la plupart des outils que je vous montrerai fonctionneront pour n’importe laquelle d’entre elles.
Vue d’ensemble
Comme la plupart des choses dans Linux, il y a plusieurs façons d’atteindre votre objectif. Même si j’ai dit qu’il y avait trois façons de le faire, il y a probablement un nombre infini de façons, et en voici une que je ne compterai pas comme faisant partie des trois : Utilisez l’expansion.
Cependant, cela ne fonctionne que si vous voulez ajouter quelque chose au début ou à la fin d’une variable. Par exemple, disons que vous voulez ajouter ~/foo
à PATH
:
# add to the end:
PATH="$PATH:~/foo"
# add to the start:
PATH="~/foo:$PATH"
C’est facile, mais cela n’aide pas si vous voulez supprimer ou changer quelque chose dans la variable. Cela n’aide pas non plus si vous voulez changer l’ordre de certains répertoires existants.
Méthode 1 : le chemin le plus difficile
En supposant que vous êtes à l’intérieur d’un terminal GUI, vous avez probablement un moyen de couper et coller du texte. Ainsi, il pourrait sembler facile d’écrire :
echo $PATH
Puis vous pouvez ramasser le texte et, sur une nouvelle ligne de commande, entrer PATH="
et coller le reste du texte. Faites vos modifications, fermez la citation, et tapez Enter
. Vous pourriez penser que ce n’est pas une grande amélioration si vous avez besoin d’éditer le texte existant, mais il s’avère que si vous appuyez sur CONTROL+X, CONTROL+E
dans bash, vous obtiendrez une belle fenêtre d’éditeur où vous pourrez éditer votre commande. Cela fonctionnera avec n’importe quelle commande, et est très utile lorsque vous tirez une longue ligne de commande de l’historique que vous devez corriger.
Comment bash sait-il quel éditeur utiliser ? La variable d’environnement EDITOR
. Si vous n’aimez pas l’éditeur qu’il fait apparaître par défaut, modifiez votre fichier de démarrage (par exemple, .bashrc) pour définir la variable :
EDITOR=nano
C’est bien, mais nous pouvons faire mieux. Après tout, cette méthode vous oblige à afficher la variable, à faire de la saisie manuelle, puis à faire un copier-coller.
Méthode 2 : envedit/pathedit
Sur GitHub, vous trouverez des scripts pour envedit et pathedit. Ce sont de simples scripts que vous pouvez mettre sur votre système quelque part où ils peuvent être trouvés (par exemple, /usr/local/bin). Si vous voulez qu’ils soient trouvés sur le chemin, vous devez les rendre exécutables (chmod 755
).
Le problème est que les changements qu’un script apporte à l’environnement ne sont pas conservés après la sortie de ce script (voir la section Qu’est-ce que l’environnement ?, ci-dessous). Par conséquent, vous devez sourcer ces fichiers pour les faire fonctionner. Le script pathedit éditera le PATH
dans votre éditeur préféré tandis que le envedit
nécessite un nom de variable et fera le même travail:
# use . or source for these scripts
. pathedit
# or
source pathedit
. envedit PULSE # edit $PULSE
Un peu ennuyeux de devoir se rappeler de les sourcer tout le temps, donc les scripts ont une caractéristique spéciale. Si vous les sourcez une fois dans votre .bashrc et passez l’argument alias
, les scripts se mettront en place un alias pour eux-mêmes de sorte que le simple fait de taper pathedit ou envedit provoquera la source:
. pathedit alias # now just typing pathedit will work
Comme d’habitude, le script utilise $EDITOR
pour savoir quel éditeur utiliser. Si vous voulez un éditeur spécial uniquement dans ce but, définissez $PATHEDIT_EDITOR
ou $ENVEDIT_EDITOR
et cela remplacera les paramètres habituels. Si cela n’est pas défini, le script recherche $EDITOR
et $VISUAL
avant de choisir vi par défaut.
Méthode 3 : envedit2/pathedit2
La troisième méthode se trouve également sur la même page GitHub. Le fonctionnement est exactement le même que celui de la méthode 2. C’est-à-dire que vous placez toujours les fichiers quelque part et les appelez avec l’argument alias
pour les configurer. Cependant, ces scripts n’utilisent pas votre éditeur de texte. Au lieu de cela, ils chargent le tampon de ligne de commande bash avec la bonne chaîne à éditer. C’est très similaire à la première méthode, sauf que les étapes sont automatisées pour vous.
Notez que lorsque vous exécutez l’un ou l’autre, ils mettent en place un alias pour envedit ou pathedit, de sorte que vous n’utiliserez pas les 2 pour les utiliser sauf lorsque vous les configurez. Cela signifie également que le dernier que vous avez configuré « gagne ». Vous ne pouvez pas configurer les deux en même temps, à moins de faire de la chirurgie de script ou de configurer vos propres alias.
Lorsque vous exécutez l’un de ces scripts, vous pouvez voir un étrange caractère d’échappement apparaître avant votre invite. C’est le rapport d’état qui déclenche le remplissage du tampon. Il est inoffensif et si cela vous dérange, appuyez simplement sur CONTROL+L
pour redessiner l’écran.
Voilà vos trois
Si vous ne voulez utiliser que ces scripts, vous avez terminé. J’espère que vous les trouverez utiles. Si vous ne vous souciez pas de savoir comment et pourquoi tout cela fonctionne, vous pouvez vous arrêter ici. Mais si vous voulez en savoir plus sur la raison pour laquelle ces scripts sont aliasés et sur le fonctionnement de l’environnement, lisez la suite.
Qu’est-ce que l’environnement ?
Vous pouvez penser à l’environnement comme une petite base de données qui est passée à chaque programme. Par exemple, vous avez probablement une variable d’environnement appelée EDITOR
qui est généralement définie sur quelque chose comme vi, emacs, ou nano. Lorsqu’un programme a besoin d’appeler un éditeur de texte, il trouvera quel éditeur vous aimez utiliser en lisant cette variable d’environnement.
Lorsqu’un programme A lance un autre programme (B), le programme enfant obtient une copie de l’environnement, bien que le programme A puisse y apporter des modifications avant de lancer B. Cependant, toutes les modifications apportées par B ne sont en vigueur que pour B et tous les programmes qu’il lance.
Pratiquement, cela signifie que rien de ce que vous faites dans un programme lancé n’aura d’impact sur tout autre programme qui n’a pas été lancé à partir du programme. C’est un vrai problème dans les scripts shell. Par exemple, supposons que vous vouliez écrire un script qui ajoute ~/foo
à la fin de PATH
. Cela ne fonctionnera pas :
#!/bin/bash
# Bad example
PATH="$PATH:~/foo"
Le problème est que le script s’exécutera dans sa propre copie de bash. Il modifiera consciencieusement la variable PATH
et sortira ensuite, faisant disparaître la nouvelle copie de PATH
. Bien sûr, le changement serait en vigueur pour toute autre partie du script. Pour que cela fonctionne, vous auriez besoin de source
le script (et alors il n’a pas besoin de la ligne # !, bien que cela ne fasse pas de mal de la laisser). Supposons que le nom du script ci-dessus soit foopath
. Vous pourriez dire :
source ./foopath
# or the same thing:
. ./foopath
C’est ainsi que certains des scripts mentionnés fonctionnent, en sourçant dans le shell, ils peuvent changer l’environnement actuel du shell.
C’est tout, vraiment… Sauf
Si vous êtes arrivé jusqu’ici, félicitations. J’espère que vous trouverez ces outils utiles et n’oubliez pas de signaler les bugs sur GitHub.
Bonus Round
J’ai dit plus tôt, que couper et coller manuellement pourrait être la façon la plus difficile. Cependant, il y a une autre façon de le faire. Si vous avez /etc/inputrc ou ~/.inputrc configuré correctement, vous pouvez taper (mais n’appuyez pas sur Entrée):
PATH=$PATH
Puis appuyez sur Alt+Control+E et le shell développera la variable $PATH pour vous. Cependant, si vous essayez:
PATH="$PATH"
Vous verrez que l’expansion de la variable perdra vos guillemets. Vous devez faire ce qui est le plus délicat :
PATH=\"$PATH\"
Puis appuyez sur Alt+Control+E. La sortie de bind -P
peut vous dire si la fonction shell-expand-line
est liée à quelque chose.