Quest-ce que PATH
dans un Mac OS? Je lai utilisé pour installer des outils de ligne de commande globaux, mais la seule documentation que jai trouvée est des tutoriels pour faire exactement cela, sans véritable explication de ce qui se passe sous la capuche. Je nai pas non plus trouvé de page pertinente sur Wikipedia .
Alors, quel est le but de PATH
et quelle est la différence entre /etc/paths
et ~/.bash_profile
**?
Par exemple, dans mon paths
fichier, je vois ceci:
/usr/bin /bin /usr/sbin /sbin /usr/local/bin
Mais dans mon ~/.bash_profile
, Je vois ceci:
# Setting PATH for Python 2.7 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" export PATH
Sagit-il simplement dun ajout spécifique à lutilisateur au fichier paths
? « est tout ce truc dans paths
, comme /usr/bin
?
Commentaires
- Veuillez ne ‘ combiner plusieurs questions dans un seul message. Chacune de vos questions serait la bienvenue ici séparément, mais pas toutes ensemble comme ça. Veuillez réduire cela à une seule question, vous pouvez combiner 1 et 2 mais les autres nont rien à voir avec PATH en particulier. 3 est répondu ici 4 est expliqué ici et 5 na pas beaucoup de sens I ‘ jai peur. Votre question bonus non plus, quels fichiers sont binaires? Les scripts ne le sont pas.
- Jai modifié ma question vers le bas. De plus, jai trouvé ces liens utiles. Merci.
Réponse
1. À quoi sert PATH?
PATH
est une variable denvironnement qui contient une liste de répertoires séparés par deux-points où votre shell recherchera les exécutables que vous nommez sur la ligne de commande sans fournir de chemin explicite vers eux (comme dans votre exemple jsdoc
). Ainsi, si votre PATH
a
/usr/bin:/bin:/home/bin
alors tout exécutable que vous appelez par son nom sera recherché dans ces répertoires (dans cet ordre) et le premier exécutable trouvé est celui exécuté.
2. Quelle est la différence entre / etc / chemins et ~ / .bash_profile
Selon cette question sur ServerFault , /etc/paths
est utilisé pour définir PATH
globalement (cest-à-dire à léchelle du système, pour tous les utilisateurs) tandis que ~/.bash_profile
est utilisé pour définir les préférences de chaque utilisateur (où ~
sera le répertoire personnel de lutilisateur). Ce qui est écrit dans .bash_profile
peut soit ajouter au PATH
global à partir de /etc/paths
soit le remplacer complètement.
Pour lenregistrement, /etc/paths
semble être une particularité de MAC OS: je ne lai pas rencontré sur GNU / Linux, au moins.
Commentaires
Réponse
Quel est le but de PATH?
Cest ainsi que votre shell trouve des programmes. Lorsque vous tapez ls
, par exemple, cela exécute un programme appelé ls
qui réside dans /bin
sur la plupart des systèmes, y compris Mac OS X. Votre shell ne peut le trouver que parce que /bin
est dans le PATH
.
Le shell recherche les programmes dans lordre PATH
, de gauche à droite. Sil y a deux programmes ls
sur votre système et que leurs répertoires se trouvent tous les deux dans votre PATH
, il trouvera celui dans le répertoire indiqué dabord dans votre PATH
.
Quelle est la différence entre / etc / chemins et ~ / .bash_profile
Les chemins définis dans /etc/paths
sont ajoutés au PATH
à démarrage dans tous les shells sous Mac OS X.
~/.bash_profile
nest quun des nombreux scripts shell exécutés par Bash au démarrage, et plusieurs dentre eux sont spécifiques à Bash. Par conséquent, si vous modifiez votre shell —, Mac OS X est également livré tcsh
et zsh
, par exemple, — les modifications apportées à /etc/bashrc
ne sappliquent pas à votre nouveau shell.
De plus, /etc/paths
est un fichier de configuration au niveau du système, tandis que ~/.bash_profile
est par utilisateur. Si vous aviez configuré plusieurs utilisateurs interactifs sur votre Mac, vous ne voudriez pas ajouter des répertoires à /etc/paths
que vous ne vouliez pas voir apparaître dans tout le monde « s PATH
. Il en va de même pour /etc/bashrc
, sauf bien sûr qui ne sapplique quaux utilisateurs qui utilisent Bash comme shell.
Quelle est la différence entre PATH et $ PATH et $ {PATH}?
Vous ne voyez généralement que le variable sans le sigil lorsque vous définissez la variable. FOO=bar
définit la variable denvironnement FOO
sur la chaîne bar
. Si vous tapez set
, le shell vous montre toutes les variables denvironnement, et dans ce cas, vous voyez également la variable sans aucun sigil.
$PATH
et ${PATH}
sont généralement interchangeables. Ils indiquent au shell détendre la variable PATH
actuelle » s valeur en place. La différence a à voir avec comment et où vous les utilisez. Par exemple:
$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx
Dans la deuxième commande echo
, le shell nimprime rien car il demande au shell dimprimer une variable appelée FOOx
, qui nexiste pas; le shell traite les variables inexistantes comme vides. Parce que le troisième echo
utilise la syntaxe entre accolades , il permet au shell de voir que vous demandez la variable FOO
, et que la x
est juste un autre caractère que vous voulez imprimer immédiatement après .
Il existe une autre façon dobtenir le même effet sans accolades, au fait:
$ echo "$FOO"x barx
Les variables denvironnement sont développées dans des guillemets doubles et les guillemets séparent x
de lexpansion des variables afin que le shell fasse ce quil faut.
Je « m utilise le FOO
variable denvironnement ici juste pour plus de clarté. Tout ce que jai écrit ci-dessus sapplique aussi bien à , car ce nest quune autre variable denvironnement. Les exemples de textes seraient simplement beaucoup plus longs.
Que signifie exporter PATH? Quand exportons-nous?
En prenant lexemple ci-dessus FOO
, si vous deviez exécuter un autre programme, il ne verrait pas la variable FOO
car elle nest pas exportée. Elle ne vit que dans cette instance de shell:
$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar
Lorsque je lance pour la première fois un nouveau shell bash
sous celui que jutilisais déjà, essayez dafficher la valeur de FOO
, je obtenir un espace vide car FOO
na pas été exporté pour que les sous-programmes puissent le voir. Ensuite, jai quitté la deuxième instance de bash
, je lai exportée, jai relancé bash
, et maintenant la deuxième instance voit la valeur de FOO
.
Vous utilisez export
lorsque vous voulez que les sous-programmes voient les valeurs définies dans le shell, et ne lutilisez pas lorsque vous ne voulez pas que cela se produise.
En général, je nexporte pas les variables temporaires dans les scripts shell, car je ne veux pas quils modifient le comportement des programmes exécutés à partir de ce script shell.
Je ne répondrai à aucune de vos autres questions. Vous nêtes censé poser quune seule question à la fois. Jai seulement répondu à ces nombreuses parce quelles sont vaguement liées. Tout le reste appartient à une question distincte.
/etc/paths
sur OSX.