Hvad er PATH på et Mac OS?

Hvad er PATH i et Mac OS? Jeg har brugt det til at installere globale kommandolinjeværktøjer, men den eneste dokumentation, jeg har fundet, er tutorials til netop det, uden nogen egentlig forklaring på, hvad der sker under kølerhjelmen. Jeg har heller ikke fundet en relevant side på Wikipedia .

Så hvad er formålet med PATH og hvad er forskellen mellem /etc/paths og ~/.bash_profile **?

For eksempel i min paths fil, jeg ser dette:

/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 en brugerspecifik tilføjelse til filen paths? “er alle de ting i paths, som /usr/bin?

Kommentarer

  • Venligst don ‘ t kombiner flere spørgsmål i et enkelt indlæg. Hvert af dine spørgsmål ville være velkomne her separat, men ikke alle sammen sådan. Trim dette ned til et enkelt spørgsmål, du kan kombinere 1 og 2, men de andre har intet at gøre med PATH specifikt. 3 besvares her 4 forklares her og 5 giver ikke meget mening I ‘ er bange. Heller ikke dit bonusspørgsmål, hvilke filer er binære? Scripts er ikke.
  • Jeg har redigeret mit spørgsmål ned. Jeg fandt også disse links nyttige. Tak.

Svar

1. Hvad er formålet med PATH?

PATH er en miljøvariabel , der indeholder en kolon-adskilt liste over mapper, hvor din shell vil se efter eksekverbare filer, du navngiver på kommandolinjen uden at give en eksplicit sti til dem (som i dit jsdoc eksempel). Således, hvis din PATH har

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

så vil alle eksekverbare filer, du kalder ved navn, blive søgt efter i disse katalog (i den rækkefølge) og den første eksekverbare fundet er den, der udføres.

2. Hvad er forskellen mellem / etc / stier og ~ / .bash_profile

Ifølge dette spørgsmål om ServerFault , /etc/paths bruges til at indstille PATH globalt (dvs. hele systemet for alle brugere), mens ~/.bash_profile bruges til at indstille præ-brugerpræferencer (hvor ~ vil være brugerens hjemmekatalog). Hvad der står i .bash_profile kan enten føje til det globale PATH fra /etc/paths eller tilsidesætte det fuldstændigt.

For posten, /etc/paths synes at være en MAC OS-egenskab: I det mindste har jeg ikke stødt på den på GNU / Linux.

Kommentarer

  • Jeg har lige redigeret dem, men tak for svaret på dem alle!
  • @ggundersen Jeg trimmede mit svar til at passe til dit redigerede spørgsmål.
  • @ggundersen vil du muligvis også læse mit svar og th e link deri om /etc/paths på OSX.

Svar

Hvad er formålet med PATH?

Det er sådan, din shell finder programmer. Når du f.eks. Skriver ls, der kører et program kaldet ls, der lever i /bin på de fleste systemer, inklusive Mac OS X. Din shell kan kun finde det, fordi /bin er i PATH.

Skallen søger efter programmer i PATH rækkefølge, fra venstre mod højre. Hvis der er to ls -programmer på dit system, og deres mapper er begge i dit PATH, finder den den i den viste mappe først i din PATH.

Hvad er forskellen mellem / etc / stier og ~ / .bash_profile

Stier indstillet i /etc/paths føjes til PATH kl. opstart i alle skaller på Mac OS X.

~/.bash_profile er kun et af flere shell-scripts, der køres af Bash ved opstart, og flere af disse er Bash-specifikke. Derfor, hvis du ændrer din shell — Mac OS X sendes også tcsh og zsh, for eksempel — ændringer foretaget i /etc/bashrc gælder ikke for din nye shell.

Desuden er /etc/paths en konfigurationsfil på systemniveau, mens ~/.bash_profile er pr. bruger. Hvis du havde flere interaktive brugere konfigureret på din Mac, ville du ikke føje mapper til /etc/paths, som du ikke ville have vist i alle “s PATH. Det samme gælder for /etc/bashrc, bortset fra at det naturligvis kun gælder for brugere, der bruger Bash som deres shell.

Hvad er forskellen mellem PATH og $ PATH og $ {PATH}?

Du ser normalt kun variabel uden sigil, når du indstiller variablen. FOO=bar indstiller FOO miljøvariablen til strengen bar. Hvis du skriver set, viser skallen alle miljøvariabler, og i så fald ser du også variablen uden sigil.

$PATH og ${PATH} er normalt udskiftelige. De beder skallen om at udvide den aktuelle PATH variabel ” s værdi på stedet. Forskellen har at gøre med, hvordan og hvor du bruger dem. For eksempel:

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

I den anden echo kommando udskriver skallen intet, fordi den beder skallen om at udskrive en variabel kaldet FOOx, som ikke findes; skallen behandler ikke-eksisterende variabler som tomme. Fordi den tredje echo bruger den krøllede afstivningssyntaks , det giver skallen mulighed for at se, at du anmoder om FOO -variablen, og at x bare er et andet tegn, du vil have udskrevet straks derefter .

Der er en anden måde at få den samme effekt uden krøllede seler forresten:

$ echo "$FOO"x barx 

Miljøvariabler udvides i dobbelt anførselstegn, og anførselstegnene adskiller x fra den variable udvidelse, så skallen gør det rigtige.

I “m ved hjælp af FOO miljøvariabel her bare for klarhedens skyld. Alt, hvad jeg har skrevet ovenfor, gælder lige så godt for , da det bare er en anden miljøvariabel. Eksempelteksterne ville bare være meget længere.

Hvad betyder eksport PATH? Hvornår eksporterer vi?

Hvis vi tager ovenstående FOO eksempel, hvis du skulle køre et andet program, er det ville ikke se FOO variablen, fordi den ikke eksporteres. Den lever kun inden for den ene shell-forekomst:

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

Når jeg først kører en ny bash shell under den, jeg allerede brugte, så prøv at vise værdien af FOO, jeg få et blankt, fordi FOO ikke blev eksporteret til underprogrammer for at se. Derefter forlod jeg den anden bash forekomst, eksporterede den, kørte bash igen, og nu ser den anden instans værdien af FOO.

Du bruger export, når du vil have underprogrammer til at se værdier indstillet i skallen, og ikke bruge det når du ikke ønsker, at det skal ske.

Normalt eksporterer jeg ikke midlertidige variabler i shell-scripts, fordi jeg ikke vil have dem til at ændre, hvordan programmer kører fra dette shell-script opfører sig.

Jeg vil ikke besvare nogen af dine andre spørgsmål. Du skal kun stille et spørgsmål ad gangen. Jeg har kun besvaret så mange, fordi de er vagt beslægtede. Alt andet hører hjemme i et separat spørgsmål.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *