Ce este PATH pe un Mac OS?

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

  • Tocmai le-am editat, dar vă mulțumesc că le-ați răspuns tuturor!
  • @ggundersen Mi-am redus răspunsul pentru a se potrivi cu întrebarea dvs. editată.
  • @ggundersen s-ar putea să doriți să citiți și răspunsul meu și Linkuri despre acesta despre /etc/paths pe OSX.

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *