Mikä on PATH Mac OS: ssä?

Mikä on PATH Mac OS: ssä? Olen käyttänyt sitä globaalien komentorivityökalujen asentamiseen, mutta ainoat löytämäni dokumentaatiot ovat opetusohjelmat juuri näin tekemättä, ilman todellista selitystä tapahtumalle konepellin alle. En ole myöskään löytänyt asiaankuuluvaa sivua Wikipediasta .

Joten mikä on PATH ja mikä ero on /etc/paths ja ~/.bash_profile ** välillä?

Esimerkiksi minun paths -tiedostossa, näen tämän:

/usr/bin /bin /usr/sbin /sbin /usr/local/bin 

Mutta ~/.bash_profile, Näen tämän:

# 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 

Onko tämä vain käyttäjäkohtainen lisäys paths -tiedostoon? ”kaikki nämä tavarat paths, kuten /usr/bin?

kommentit

  • Älä ’ älä yhdistä useita kysymyksiä yhteen viestiin. Jokainen kysymyksesi olisi tervetullut täällä erikseen, mutta eivät kaikki yhdessä. Leikkaa tämä yhteen kysymykseen, voit yhdistää 1 ja 2, mutta muilla ei ole mitään tekemistä nimenomaan PATH: n kanssa. 3: een vastataan täällä 4 selitetään täällä ja 5: llä ei ole paljon järkeä I ’ pelkään. Eikä bonuskysymyksesi, mitkä tiedostot ovat binaarisia? Skriptit eivät ole.
  • Olen muokannut kysymystäni alas. Löysin myös nämä linkit hyödyllisiä. Kiitos.

Vastaa

1. Mikä on polun tarkoitus?

PATH on ympäristömuuttuja , joka sisältää kaksoispisteellä erotetun luettelon hakemistoista, joissa komentotulkki etsii komentoriviltä nimeämiäsi suoritettavia tiedostoja antamatta nimenomainen polku heille (kuten esimerkissä jsdoc). Jos PATH -sarakkeessasi on

/usr/bin:/bin:/home/bin 

, mitä tahansa suoritettavaa tiedostoa, jota kutsut nimellä, etsitään näistä hakemistoista (siinä järjestyksessä) ja ensimmäinen löydetty suoritettava tiedosto on suoritettu.

2. Mitä eroa on tiedostossa / etc / paths ja ~ / .bash_profile

Tämän kysymyksen mukaan ServerFault , /etc/paths käytetään asettamaan PATH globaalisti (ts. Koko järjestelmälle, kaikille käyttäjille), kun taas ~/.bash_profile -asetusta käytetään käyttäjäkohtaisten asetusten määrittämiseen (missä ~ on käyttäjän kotihakemisto). Mitä on kirjoitettu kohtaan .bash_profile voi joko lisätä globaaliin PATH osoitteesta /etc/paths tai ohittaa sen kokonaan.

tietue /etc/paths näyttää olevan MAC-käyttöjärjestelmän erikoisuus: En ole törmännyt siihen ainakin GNU / Linuxissa.

Kommentit

  • Muokkain niitä juuri alas, mutta kiitos vastauksesta kaikkiin!
  • @ggundersen Leikkain vastauksen vastaamaan muokattua kysymystäsi.
  • @ggundersen, voit myös lukea vastaukseni ja th e linkit siihen /etc/paths OSX: ssä.

Vastaa

Mikä on polun tarkoitus?

Näin shell löytää ohjelmia. Kun kirjoitat esimerkiksi ls, se käyttää ohjelmaa nimeltä ls, joka asuu paikassa /bin useimmissa järjestelmissä, mukaan lukien Mac OS X. Shellisi löytää sen vain siksi, että /bin on PATH.

Kuori etsii ohjelmia PATH -järjestyksessä vasemmalta oikealle. Jos järjestelmässäsi on kaksi ls -ohjelmaa ja niiden hakemistot ovat molemmat PATH -ohjelmassa, se löytää listatusta hakemistosta. ensin PATH.

Mitä eroa on / etc / paths ja ~ / .bash_profile

Kohdassa /etc/paths asetetut polut lisätään PATH -kohtaan Käynnistys kaikissa kuorissa Mac OS X: ssä.

~/.bash_profile on vain yksi monista Bashin käynnistämissä komentosarjoissa, ja monet näistä ovat Bash-kohtaisia. Siksi, jos vaihdat shellisi — Mac OS X toimittaa myös tcsh ja zsh, esimerkiksi — muutokset, jotka on tehty /etc/bashrc, eivät koske uutta kuorta.

Lisäksi /etc/paths on järjestelmätason määritystiedosto, kun taas ~/.bash_profile on käyttäjäkohtainen. Jos sinulla on useita interaktiivisia käyttäjiä määritetty Mac-tietokoneellesi, et halua lisätä hakemistoja /etc/paths -kansioihin, joita et halunnut esiintyä kaikissa ”s PATH. Sama pätee /etc/bashrc, paitsi että tietysti koskee vain käyttäjiä, jotka käyttävät Bashia kuorenaan.

Mitä eroa on PATH: n ja $ PATH: n ja $ {PATH} välillä?

Näet yleensä vain muuttuja ilman sigilia, kun asetat muuttujaa. FOO=bar asettaa ympäristömuuttujan FOO merkkijonoksi bar. Jos kirjoitat set, kuori näyttää kaikki ympäristömuuttujat, ja siinä tapauksessa näet myös muuttujan ilman merkkiä.

$PATH ja ${PATH} ovat yleensä vaihdettavissa. Ne käskevät kuorta laajentamaan nykyistä PATH muuttujaa ” s arvo paikallaan. Ero liittyy siihen, miten ja missä niitä käytetään. Esimerkki:

$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx 

Toisessa echo -komennossa kuori ei tulosta mitään, koska se pyytää kuorta tulostamaan muuttuja nimeltä FOOx, jota ei ole olemassa; kuori käsittelee olemattomat muuttujat tyhjinä. Koska kolmas echo käyttää kiharaa aaltosyntaksia , sen avulla komentotulkki näkee, että pyydät muuttujaa FOO ja x on vain yksi merkki, jonka haluat tulostaa heti sen jälkeen .

Muuten on sama tapa saada sama vaikutus ilman kiharaisia aaltosulkeita:

$ echo "$FOO"x barx 

Ympäristömuuttujia laajennetaan kaksoislainausmerkit ja lainausmerkit erottavat x -muuttujan laajennuksesta, jotta kuori tekee oikein.

I ”m käyttämällä FOO ympäristömuuttuja tässä vain selvyyden vuoksi. Kaikki mitä olen kirjoittanut yllä, pätee yhtä hyvin kohtaan , koska se on vain yksi ympäristömuuttuja. Esimerkkitekstit olisivat vain paljon pidempiä.

Mitä PATH-vienti tarkoittaa? Milloin viedään?

Ottaen yllä olevan esimerkin FOO, jos aiot suorittaa toisen ohjelman, se ei näe FOO -muuttujaa, koska sitä ei viedä. Se elää vain tuossa yhdessä kuoren ilmentymässä:

$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar 

Kun suoritin ensimmäisen kerran uuden bash -kuoren jo käyttämäni kuoren alla, yritä sitten näyttää FOO, I saada tyhjä, koska FOO ei viety alaohjelmien nähtäväksi. Sitten poistuin toisesta bash -instanssista, vienyt sen, suoritin uudelleen bash ja nyt toinen esiintymä näkee arvon FOO.

Käytät export, kun haluat aliohjelmien näkevän kuoressa asetetut arvot, äläkä käytä sitä kun et halua sen tapahtuvan.

Tyypillisesti en vie väliaikaisia muuttujia shell-komentosarjoissa, koska en halua heidän muuttavan sitä, kuinka komentosarjan komentosarjan ohjelmat toimivat.

En aio vastata mihinkään muihin kysymyksiisi. Sinun pitäisi vain kysyä yksi kysymys kerrallaan. Olen vastannut vain näihin moniin, koska he ovat epämääräisesti yhteydessä toisiinsa. Kaikki muu kuuluu erilliseen kysymykseen.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *