web-dev-qa-db-fra.com

Quand je fais un chemin d'exportation en utilisant 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, à quel fichier est-il ajouté?

2
Kaigo

Lorsque vous export une variable, elle n'est ajoutée à aucun fichier.

L'effet de export, par opposition à la simple affectation d'une variable, consiste à transmettre la variable à 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. Une fois le shell et tous ses processus enfants terminés, la variable exportée a disparu! Lorsque vous ouvrez un nouveau shell qui n'est pas un enfant du premier shell, ce dernier 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. Il est déjà exporté; il va automatiquement être transmis à l'environnement des processus enfants et, lorsque vous le modifiez, les processus enfants hériteront également de la modification.

Vous pouvez le voir en utilisant printenv, une commande permettant d’imprimer des 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 source /etc/environment, car tout nouveau Shell que je démarre à partir de ce Shell héritera de la variable PATH que j'ai foirée ...)

Si vous souhaitez 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, définie par défaut dans /etc/environment sur Ubuntu. Je recommande de ne pas éditer /etc/environment pour définir le chemin, ou si c'est le cas, veillez à faire une sauvegarde du fichier original, car vous n'aura aucun autre moyen de récupérer le PATH d'origine (sauf si vous l'avez écrit quelque part ou si vous avez une mémoire impressionnante). Sachez également qu'aucune extension ne sera effectuée sur le contenu. Vous devez donc utiliser des chemins d'accès complets, et non pas $PATH ou $GOPATH ou ~. 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 exécuter aucune commande (à l'exception de celles intégrées dans le shell) sans utiliser leur chemin complet.

Je ne recommande pas non plus de définir PATH dans .bashrc, car chaque Bash Shell interactif lit .bashrc, et il est assez courant de démarrer un nouveau Shell à partir d'un Shell, etc. Si vous mettez quelque chose comme:

PATH="$PATH:$HOME/foo"

dans votre .bashrc, vous constaterez que /home/user/foo est ajouté plusieurs fois à votre PATH; chaque fois qu'un shell démarre un shell, le chemin est étendu à nouveau. Cela pourrait éventuellement ralentir les choses, surtout si vous ajoutez beaucoup de chemins. De plus, seuls les shells de Bash interactifs lisent ~/.bashrc, donc si vous utilisez un shell autre que Bash ou exécutez un script, sans qu'il s'agisse d'un processus enfant d'un Bash Shell interactif, cette variable n'aura pas.

Au lieu de cela, je recommande d'ajouter une ligne à ~/.profile pour étendre votre CHEMIN. Ce fichier n’est lu que par les shells de login; En règle générale, il n'est lu qu'une fois lorsque vous vous connectez à votre session. Par conséquent, PATH ne sera ajouté qu'une seule fois et tous les shells hériteront des variables d'environnement définies ici, pas seulement des shells Bash interactifs. Il est habituel d’ajouter des variables d’environnement à ce fichier. Vous pouvez donc ouvrir ~/.profile dans un éditeur de texte et ajouter 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 comporterait des caractères spéciaux (c’est également une bonne idée de créer des répertoires n’ayant pas de caractères spéciaux dans leurs noms, mais que des choses se passent), et si vous le souhaitez. citez-le, vous ne pouvez pas utiliser ~ comme raccourci pour /home/user car les guillemets doubles (") suppriment le développement du tilde, mais vous pouvez utiliser $HOME parce que le développement des paramètres est toujours et $HOME deviendra /home/user.

Après l’édition, enregistrez le fichier et quittez-le, reconnectez-vous et reconnectez-vous, ou exécutez source ~/.profile, et votre variable PATH inclura toujours /home/user/workspace/me/go.

2
Zanna

Les personnalisations du shell sont généralement modifiées dans $HOME/.bashrc, qui est sourced par chaque shell que vous démarrez. Lire man bash.

BTW, vous devez avoir la définition GOPATH

 GOPATH=~/workspace/me/go  

Avant d'utiliser GOPATH

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Aussi, où est la définition de GOROOT?

0
waltinator