Quest-ce que PATH sur un Mac OS?

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

  • Je viens de les modifier, mais merci davoir répondu à toutes!
  • @ggundersen Jai ajusté ma réponse pour ladapter à votre question modifiée.
  • @ggundersen, vous pouvez également lire ma réponse et e Il contient des liens à propos de /etc/paths sur OSX.

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *