Ce este PATH
într-un Mac OS? L-am folosit pentru a instala instrumente globale de linie de comandă, dar singura documentație pe care am găsit-o sunt tutoriale pentru a face exact asta, fără nicio explicație reală a ceea ce se întâmplă sub capotă. De asemenea, nu am găsit o pagină relevantă pe Wikipedia .
Deci, care este scopul PATH
și care este diferența dintre /etc/paths
și ~/.bash_profile
**?
De exemplu, în paths
fișier, văd acest lucru:
/usr/bin /bin /usr/sbin /sbin /usr/local/bin
Dar în ~/.bash_profile
, Văd acest lucru:
# 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
Este doar o adăugare specifică utilizatorului la fișierul paths
? Ce „Sunt toate acele lucruri din paths
, cum ar fi /usr/bin
?
Comentarii
- Vă rugăm să nu ‘ nu combinați mai multe întrebări într-o singură postare. Fiecare dintre întrebările dvs. ar fi binevenită aici separat, dar nu toate împreună așa. Vă rugăm să reduceți acest lucru la o singură întrebare, puteți combina 1 și 2, dar celelalte nu au nimic de-a face cu PATH în mod specific. 3 este răspuns aici 4 este explicat aici și 5 nu are mult sens I ‘ mi-e teamă. Nici întrebarea bonusului dvs., ce fișiere sunt binare? Scripturile nu sunt.
- Mi-am editat întrebarea. De asemenea, am găsit utile aceste link-uri. Mulțumesc.
Răspuns
1. Care este scopul PATH?
PATH
este o variabilă de mediu care conține o listă separată de două puncte a directoarelor în care shell-ul dvs. va căuta executabile pe care le denumiți pe linia de comandă fără a furniza un cale explicită către ele (ca în exemplul jsdoc
). Astfel, dacă PATH
are
/usr/bin:/bin:/home/bin
atunci orice executabil pe care îl apelați după nume va fi căutat în aceste directoare (în acea ordine) și primul executabil găsit este cel executat.
2. Care este diferența dintre / etc / căi și ~ / .bash_profile
Conform această întrebare pe ServerFault , /etc/paths
este utilizat pentru a seta PATH
la nivel global (adică la nivel de sistem, pentru toți utilizatorii) în timp ce ~/.bash_profile
este utilizat pentru a seta preferințele per utilizator (unde ~
va fi directorul de acasă al utilizatorului). Ce este scris în .bash_profile
poate adăuga la PATH
global din /etc/paths
sau îl poate suprascrie complet.
Pentru înregistrarea, /etc/paths
pare a fi o particularitate a sistemului de operare MAC: cel puțin nu am întâlnit-o pe GNU / Linux.
Comentarii
Răspuns
Care este scopul PATH?
Acesta este modul în care shell găsește programe. Când tastați ls
, de exemplu, acesta rulează un program numit ls
care trăiește în /bin
pe majoritatea sistemelor, inclusiv Mac OS X. Shell-ul dvs. poate găsi acest lucru doar deoarece /bin
se află în PATH
.
Shell-ul caută programe în ordinea PATH
, de la stânga la dreapta. Dacă există două programe ls
pe sistemul dvs. și directoarele lor sunt ambele în PATH
, acesta îl va găsi pe cel din directorul listat mai întâi în PATH
.
Care este diferența dintre / etc / căi și ~ / .bash_profile
Căile setate în /etc/paths
sunt adăugate la PATH
la pornirea în toate shell-urile de pe Mac OS X.
~/.bash_profile
este doar unul dintre mai multe scripturi shell rulate de Bash la pornire și mai multe dintre acestea sunt specifice Bash. Prin urmare, dacă vă schimbați shell-ul — Mac OS X este livrat și tcsh
și zsh
, de exemplu, — modificările aduse /etc/bashrc
nu se aplică noii dvs. shell.
De asemenea, /etc/paths
este un fișier de configurare la nivel de sistem, în timp ce ~/.bash_profile
este per utilizator. Dacă ați configurat mai mulți utilizatori interactive pe Mac-ul dvs., nu ați dori să adăugați directoare la /etc/paths
pe care nu ați vrea să apară în toată lumea „s PATH
. Același lucru este valabil și pentru /etc/bashrc
, cu excepția faptului că, desigur, se aplică numai utilizatorilor care folosesc Bash ca shell.
Care este diferența dintre PATH și $ PATH și $ {PATH}?
De obicei, vedeți numai variabilă fără sigil când setați variabila. FOO=bar
setează variabila de mediu FOO
la șirul bar
. Dacă tastați set
, shell-ul vă arată toate variabilele de mediu și, în acest caz, vedeți și variabila fără sigiliu.
$PATH
și ${PATH}
sunt de obicei interschimbabile. Acestea spun shell-ului să extindă variabila actuală PATH
s valoare în loc. Diferența are legătură cu modul și locul în care le folosiți. De exemplu:
$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx
În a doua comandă echo
, shell-ul nu imprimă nimic deoarece cere shell-ului să imprime o variabilă numită FOOx
, care nu există; shell tratează variabilele inexistente ca fiind goale. Deoarece a treia echo
folosește sintaxa acoladei , permite shell-ului să vadă că solicitați variabila FOO
și că x
este doar un alt caracter pe care doriți să-l imprimați imediat .
Există o altă modalitate de a obține același efect fără acolade, apropo:
$ echo "$FOO"x barx
Variabilele de mediu sunt extinse în ghilimele duble, iar ghilimelele separă x
de expansiunea variabilă, astfel încât shell-ul să facă ceea ce trebuie.
Eu „folosesc FOO
variabilă de mediu aici doar pentru claritate. Tot ceea ce am scris mai sus se aplică la fel de bine și pentru , deoarece este doar o altă variabilă de mediu. Textele de exemplu ar fi mult mai lungi.
Ce înseamnă exportul PATH? Când exportăm?
Luând exemplul de mai sus FOO
, dacă ar fi să rulați un alt program, n-ar vedea variabila FOO
deoarece nu este exportată. Trăiește numai în acea instanță shell:
$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar
Când execut prima dată un nou shell bash
sub cel pe care îl foloseam deja, apoi încearcă să arăt valoarea FOO
, obțineți un spațiu necompletat deoarece FOO
nu a fost exportat pentru ca subprogramele să poată fi văzute. Apoi am ieșit din a doua instanță bash
, am exportat-o, am rulat din nou bash
și acum a doua instanță vede valoarea FOO
.
Utilizați export
atunci când doriți ca subprogramele să vadă valorile setate în shell și să nu o utilizați când nu doriți ca acest lucru să se întâmple.
De obicei, nu export variabilele temporare în scripturile shell, deoarece nu vreau să schimbe modul în care se comportă programele rulate din acel script shell.
Nu voi răspunde la niciuna dintre celelalte întrebări. Trebuie să puneți o singură întrebare pe rând. „Am răspuns doar la mulți, deoarece sunt vag legați. Orice altceva aparține unei întrebări separate.
/etc/paths
pe OSX.