Hva er PATH på et Mac OS?

Hva er PATH i et Mac OS? Jeg har brukt den til å installere globale kommandolinjeverktøy, men den eneste dokumentasjonen jeg har funnet er tutorials for å gjøre nettopp det, uten noen egentlig forklaring på hva som skjer under panseret. Jeg har ikke funnet en relevant side på Wikipedia .

Så hva er hensikten med PATH og hva er forskjellen mellom /etc/paths og ~/.bash_profile **?

For eksempel i min paths fil, jeg ser denne:

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

Men i min ~/.bash_profile, Jeg ser dette:

# 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 

Er dette bare et brukerspesifikt tillegg til paths -filen? «er alle de tingene i paths, som /usr/bin?

Kommentarer

  • Vennligst ikke ‘ Ikke kombiner flere spørsmål i ett innlegg. Hvert av spørsmålene dine vil være velkomne her hver for seg, men ikke alle sammen slik. Vennligst trimm dette ned til et enkelt spørsmål, du kan kombinere 1 og 2, men de andre har ingenting med PATH å gjøre spesifikt. 3 blir besvart her 4 blir forklart her og 5 gir ikke mye mening I ‘ er redd. Heller ikke bonusspørsmålet ditt, hvilke filer er binære? Skript er ikke.
  • Jeg har redigert spørsmålet mitt. Også, jeg syntes disse lenkene var nyttige. Takk.

Svar

1. Hva er hensikten med PATH?

PATH er en miljøvariabel som inneholder en kolon-separert liste over kataloger der skallet ditt vil se etter kjørbare filer du navngir på kommandolinjen uten å oppgi en eksplisitt vei til dem (som i jsdoc -eksemplet). Dermed, hvis PATH har

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

, vil alle kjørbare filer du kaller med navn, bli søkt etter i disse katalogene (i den rekkefølgen) og den første kjørbare filen er den som ble utført.

2. Hva er forskjellen mellom / etc / pather og ~ / .bash_profile

I følge dette spørsmålet om ServerFault , /etc/paths brukes til å angi PATH globalt (dvs. hele systemet, for alle brukere) mens ~/.bash_profile brukes til å angi innstillinger per bruker (der ~ vil være brukerens hjemmekatalog). Det som står i .bash_profile kan enten legge til det globale PATH fra /etc/paths eller overstyre det fullstendig.

For posten, /etc/paths ser ut til å være en MAC OS-særegenhet: Jeg har ikke kommet over den i det minste i GNU / Linux.

Kommentarer

  • Jeg redigerte dem nettopp, men takk for at du svarte på dem alle!
  • @ggundersen Jeg trimmet svaret mitt for å passe til det redigerte spørsmålet ditt.
  • @ggundersen vil du kanskje også lese svaret mitt og th lenker der om /etc/paths på OSX.

Svar

Hva er hensikten med PATH?

Det er slik din shell finner programmer. Når du for eksempel skriver inn ls, kjører det et program kalt ls som bor i /bin på de fleste systemer, inkludert Mac OS X. Skallet ditt kan bare finne det fordi /bin er i PATH.

Skallet søker etter programmer i PATH rekkefølge, fra venstre til høyre. Hvis det er to ls programmer på systemet ditt, og katalogene deres er begge i PATH, vil den finne den i katalogen som er oppført først i PATH.

Hva er forskjellen mellom / etc / baner og ~ / .bash_profile

Baner satt i /etc/paths legges til PATH kl. oppstart i alle skall på Mac OS X.

~/.bash_profile er bare ett av flere skallskript som kjøres av Bash ved oppstart, og flere av disse er Bash-spesifikke. Derfor, hvis du endrer skallet ditt — Mac OS X sendes også tcsh og zsh, for eksempel — endringer som er gjort i /etc/bashrc gjelder ikke for det nye skallet ditt.

Dessuten er /etc/paths en konfigurasjonsfil på systemnivå, mens ~/.bash_profile er per bruker. Hvis du hadde konfigurert flere interaktive brukere på din Mac, ville du ikke legge til kataloger i /etc/paths at du ikke ønsket å vises i alle «s PATH. Det samme gjelder /etc/bashrc, bortsett fra at det selvfølgelig bare gjelder brukere som bruker Bash som skall.

Hva er forskjellen mellom PATH og $ PATH og $ {PATH}?

Du ser vanligvis bare variabel uten sigil når du setter variabelen. FOO=bar setter FOO miljøvariabelen til strengen bar. Hvis du skriver set, viser skallet deg alle miljøvariablene, og i så fall ser du også variabelen uten noe sigil.

$PATH og ${PATH} er vanligvis utskiftbare. De forteller skallet å utvide den nåværende PATH -variabelen s verdi på stedet. Forskjellen har å gjøre med hvordan og hvor du bruker dem. For eksempel:

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

I den andre echo -kommandoen skriver ikke skallet ut noe fordi det ber skallet om å skrive ut en variabel kalt FOOx, som ikke eksisterer; skallet behandler ikke-eksisterende variabler som tomme. Fordi den tredje echo bruker den krøllete avstivningssyntaks , lar det skallet se at du ber om FOO -variabelen, og at x bare er et tegn du vil skrive ut umiddelbart etterpå .

Det er for øvrig en annen måte å få den samme effekten uten krøllete bukseseler:

$ echo "$FOO"x barx 

Miljøvariabler utvides i doble anførselstegn, og anførselstegnene skiller x fra variabel utvidelse slik at skallet gjør det rette.

Jeg bruker m FOO miljøvariabel her bare for klarhet. Alt jeg har skrevet ovenfor gjelder like godt for , siden det bare er en annen miljøvariabel. Eksempeltekstene ville bare være mye lenger.

Hva betyr eksport PATH? Når eksporterer vi?

Hvis vi tar eksemplet ovenfor FOO, hvis du skulle kjøre et annet program, vil ikke se FOO variabelen fordi den ikke eksporteres. Den lever bare innenfor den ene skallforekomsten:

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

Når jeg først kjører et nytt bash skall under det jeg allerede brukte, så prøv å vise verdien til FOO, få et blankt fordi FOO ikke ble eksportert for underprogrammer å se. Så gikk jeg ut av den andre bash forekomsten, eksporterte den, kjørte bash igjen, og nå ser den andre forekomsten verdien av FOO.

Du bruker export når du vil at underprogrammer skal se verdier satt i skallet, og ikke bruker det når du ikke vil at det skal skje.

Vanligvis eksporterer jeg ikke midlertidige variabler i skallskript, fordi jeg ikke vil at de skal endre hvordan programmene kjører fra det skallskriptet oppfører seg.

Jeg kommer ikke til å svare på noen av de andre spørsmålene dine. Du skal bare stille ett spørsmål om gangen. Jeg har bare svart på dette mange fordi de er uklart relaterte. Alt annet hører hjemme i et eget spørsmål.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *