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
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.
/etc/paths
på OSX.