Quel est le but de PATH?
C'est ainsi que votre shell trouve des programmes. Lorsque vous tapez ls, par exemple, cela exécute un programme appelé lsqui réside /binsur la plupart des systèmes, y compris Mac OS X. Votre shell ne peut le trouver que parce qu'il se /bintrouve dans le PATH.
Le shell recherche les programmes dans l' PATHordre, de gauche à droite. S'il y a deux lsprogrammes sur votre système et que leurs répertoires sont tous les deux dans votre PATH, il trouvera celui dans le répertoire indiqué en premier dans votre PATH.
Quelle est la différence entre / etc / chemins et ~ / .bash_profile
Les chemins d'accès définis /etc/pathssont ajoutés PATHau démarrage dans tous les shells sur Mac OS X.
~/.bash_profilen'est qu'un des nombreux scripts shell exécutés par Bash au démarrage, et plusieurs d'entre eux sont spécifiques à Bash. Par conséquent, si vous changez de shell, Mac OS X est également livré tcshet zsh, par exemple, les modifications apportées /etc/bashrcne s'appliquent pas à votre nouveau shell.
Il /etc/pathss'agit également d'un fichier de configuration au niveau du système, alors qu'il ~/.bash_profileest par utilisateur. Si vous aviez plusieurs utilisateurs interactifs configurés sur votre Mac, vous ne voudriez pas ajouter des répertoires /etc/pathsauxquels vous ne vouliez pas apparaître dans tout le monde PATH. La même chose est vraie pour /etc/bashrc, sauf que bien sûr cela ne s'applique qu'aux utilisateurs qui utilisent Bash comme shell.
Quelle est la différence entre PATH et $ PATH et $ {PATH}?
Vous ne voyez généralement la variable sans le sceau lorsque vous définissez la variable. FOO=bardéfinit la FOOvariable d'environnement sur la chaîne bar. Si vous tapez set, le shell vous montre toutes les variables d'environnement, et dans ce cas, vous voyez également la variable sans aucun sigil.
$PATHet ${PATH}sont généralement interchangeables. Ils indiquent au shell d'étendre la PATHvaleur de la variable actuelle sur 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 echocommande, le shell n'imprime rien car il lui demande d'imprimer une variable appelée FOOx, qui n'existe pas; le shell traite les variables inexistantes comme vides. Étant donné que le troisième echoutilise la syntaxe d'accolade, il permet au shell de voir que vous demandez la FOOvariable et que xc'est juste un autre caractère que vous souhaitez imprimer immédiatement après.
Il y a une autre façon d'obtenir le même effet sans accolades, d'ailleurs:
$ echo "$FOO"x
barx
Les variables d'environnement sont développées entre guillemets doubles, et les guillemets séparent l' xextension de la variable afin que le shell fasse ce qu'il faut.
J'utilise la FOOvariable d'environnement ici juste pour plus de clarté. Tout ce que j'ai écrit ci-dessus s'applique également PATH, car il s'agit simplement d'une autre variable d'environnement. Les textes d'exemple seraient juste beaucoup plus longs.
Que signifie exporter PATH? Quand exportons-nous?
En prenant l' FOOexemple ci-dessus , si vous deviez exécuter un autre programme, il ne verrait pas la FOOvariable car elle n'est pas exportée. Il ne vit que dans cette seule instance de shell:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Lorsque j'exécute un nouveau bashshell sous celui que j'utilisais déjà, puis j'essaie d'afficher la valeur FOO, j'obtiens un blanc car il FOOn'a pas été exporté pour que les sous-programmes le voient. Ensuite, j'ai quitté la deuxième bashinstance, je l'ai exportée, j'ai exécuté de bashnouveau, et maintenant la deuxième instance voit la valeur de FOO.
Vous utilisez exportlorsque vous voulez que les sous-programmes voient les valeurs définies dans le shell, et ne l'utilisez pas lorsque vous ne voulez pas que cela se produise.
En règle générale, je n'exporte pas de variables temporaires dans des scripts shell, car je ne veux pas qu'elles modifient le comportement des programmes exécutés à partir de ce script shell.
Je ne vais répondre à aucune de vos autres questions. Vous n'êtes censé poser qu'une seule question à la fois. Je n'ai répondu à ces questions que parce qu'elles sont vaguement liées. Tout le reste appartient à une question distincte.