Je joue actuellement avec le shell de poisson et j'ai du mal à comprendre comment la variable PATH
est définie. Pour ce que ça vaut, j'utilise aussi oh-my-fish .
Si je fais écho à mon chemin actuel, j'obtiens:
➜ fish echo $PATH
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/X11/bin /usr/texbin /Users/myname/.opam/system/bin
Regarder ~/.config/fish/config.fish
Je vois la ligne suivante
set PATH /usr/local/bin $PATH /Users/myname/.opam/system/bin
Ma question est (et cette formulation reflétera probablement mon manque de connaissances sur le sujet): avant config.fish
en cours de traitement, où est définie la variable PATH
? c'est-à-dire: d'où viennent tous les chemins entre /usr/local/bin
et /Users/myname/.opam/system/bin
viens de?
Comme indiqué dans le tutoriel poisson officiel , vous pouvez modifier le $fish_user_paths
variable universelle.
Exécutez une fois la ligne de commande suivante:
set -U fish_user_paths /usr/local/bin $fish_user_paths
Cela ajoutera /usr/local/bin
en permanence sur votre chemin, et affectera également la session en cours et toutes les instances futures.
N'ajoutez pas cette ligne à votre config.fish
fichier, car cela provoquerait le $fish_user_paths
pour croître avec chaque instance de Shell.
Comme tous les shells, fish hérite de son PATH de l'environnement dans lequel il est démarré. La façon dont cela est défini pour les shells de connexion diffère selon les systèmes d'exploitation - sous Linux, par exemple, /etc/login.defs
contrôle le PATH initial défini pour tous les shells de connexion. Je ne sais pas comment cela est réglé sur OS X.
Ensuite, comme bash
ou csh
, les fichiers d'initialisation du Shell peuvent modifier le chemin. Pour les poissons sous OS X, il y a du code dans share/fish/config.fish
pour charger les chemins à partir des fichiers de configuration de chemin OS X standard /etc/paths
et /etc/paths.d/*
. Il existe un code alternatif pour définir un chemin utile sur Solaris.
Il existe également du code pour récupérer les chemins de la variable universelle $fish_user_paths
, qui est le bonne façon d'ajouter quelque chose à votre PATH et de le faire refléter sur tous les shells .