3 votes

Lorsque je fais un chemin d'exportation en utilisant le terminal, dans quel fichier est-il sauvegardé ?

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é ?

9voto

Zanna Points 65764

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 .

0voto

waltinator Points 32821

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 ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X