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
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.
/etc/paths
OSX: ssä.