Par exemple, lorsque je lance l'exportation export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
ou un GOPATH=~/workspace/me/go
Dans quel fichier cela est-il ajouté ?
Réponses
Trop de publicités?Quand vous export
une variable, il n'est ajouté à aucun fichier, nulle part .
L'effet de export
par opposition à la simple affectation d'une variable, est celle qui consiste à passer la variable dans l'environnement de tous les processus enfants du Shell. Il ne fait rien d'autre ; il ne modifie aucun des fichiers de configuration du Shell. Après la sortie du Shell et de tous ses processus enfants, la variable exportée a disparu ! Lorsque vous ouvrez une nouvelle Shell qui n'est pas un enfant de la première Shell, cette Shell ne se souviendra pas de votre variable.
En fait, il n'est pas nécessaire de export
PATH car PATH est déjà une variable d'environnement. Elle est déjà exportée ; elle sera automatiquement transmise dans l'environnement des processus enfants, et lorsque vous la modifiez, les processus enfants hériteront également de cette modification.
Vous pouvez voir cela en utilisant printenv
une commande pour imprimer les variables d'environnement :
$ foo=bar; echo $foo # set a variable
bar # the shell knows it
$ printenv foo # but it's not in the environment...
$ export foo; printenv foo # export the variable and check again
bar # there it is!
$ foo=new; printenv foo # change the variable
new # the change is inherited
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ PATH=/usr/bin; printenv PATH # printenv is in /usr/bin so keep that!
/usr/bin # the change was inherited
(Maintenant je dois quitter ce Shell pour récupérer mon PATH, ou bien source /etc/environment
car tout nouveau Shell que je démarre à partir de ce Shell héritera de cette variable PATH que j'ai foirée...)
Si vous voulez définir une variable de manière persistante, vous devez l'ajouter vous-même à l'un des fichiers de configuration du Shell.
PATH est la seule variable, pour autant que je sache, qui est définie par défaut en /etc/environment
sur Ubuntu. Je recommande no édition /etc/environment
pour définir le PATH, ou si vous le faites, prenez soin de faire une sauvegarde du fichier original, car vous n'aurez aucun autre moyen de récupérer le PATH original (à moins de l'avoir noté quelque part ou d'avoir une mémoire impressionnante). Sachez également qu'aucune expansion ne sera effectuée sur le contenu, vous devez donc utiliser les chemins complets, et non pas $PATH
o $GOPATH
o ~
. Si vous écrivez de telles choses, elles seront littéralement dans le PATH, et si votre PATH est littéralement $PATH:~/workspace/me/go
vous ne pourrez pas exécuter de commandes (sauf celles intégrées au Shell) sans utiliser leurs chemins complets.
Je ne recommande pas non plus de définir PATH dans .bashrc
car chaque Shell interactive de Bash lit .bashrc
et il est assez courant de démarrer un nouveau Shell à partir d'un Shell, et ainsi de suite... Si vous mettez quelque chose comme
PATH="$PATH:$HOME/foo"
dans votre .bashrc
vous trouverez alors que /home/user/foo
est ajouté à votre PATH plusieurs fois ; chaque fois qu'un Shell démarre un Shell, le PATH est à nouveau étendu. Cela pourrait éventuellement faire ralentir les choses, surtout si vous avez ajouté beaucoup de chemins. En outre, seuls les shells Bash interactifs lisent ~/.bashrc
Ainsi, si vous utilisez un Shell autre que Bash, ou si vous exécutez un Shell, sans que celui-ci soit un processus enfant d'un Shell interactif de Bash, il n'aura pas cette variable.
Je recommande plutôt d'ajouter une ligne à ~/.profile
pour étendre votre PATH. Ce fichier n'est lu que par les shells de connexion ; typiquement, il n'est lu qu'une seule fois lorsque vous vous connectez à votre session, donc le PATH ne sera ajouté qu'une seule fois, et tous les shells hériteront des variables d'environnement définies à cet endroit, pas seulement les shells Bash interactifs. Il est habituel d'ajouter des variables d'environnement à ce fichier. Ainsi, vous pouvez ouvrir ~/.profile
dans un éditeur de texte, et ajoutez des lignes disant quelque chose comme :
GOPATH="$HOME/workspace/me/go"
PATH="$PATH:$GOPATH/bin"
C'est une bonne idée de citer le chemin comme indiqué, au cas où l'un des répertoires contiendrait des caractères spéciaux (c'est aussi une bonne idée de créer des répertoires qui n'ont pas de caractères spéciaux dans leurs noms, mais, des choses arrivent), et si vous le citez, vous ne pouvez pas utiliser ~
comme un raccourci pour /home/user
car les guillemets doubles ( "
) supprime l'expansion du tilde, mais vous pouvez utiliser $HOME
à la place, car l'expansion des paramètres est toujours effectuée et $HOME
deviendra /home/user
.
Après l'avoir modifié, enregistrez le fichier et quittez, déconnectez-vous et reconnectez-vous, ou exécutez la commande suivante source ~/.profile
et votre PATH comprendra toujours /home/user/workspace/me/go
.
Les custiomations de Shell sont généralement éditées en $HOME/.bashrc
qui est sourced
par chaque Shell que vous démarrez. Lire man bash
.
BTW, vous devez avoir le GOPATH
définition
GOPATH=~/workspace/me/go
Avant d'utiliser GOPATH
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
De même, où se trouve la définition de GOROOT
?