Vad är PATH
i ett Mac OS? Jag har använt den för att installera globala kommandoradsverktyg, men den enda dokumentationen jag har hittat är tutorials för att göra just det, utan någon verklig förklaring av vad som händer under huven. Jag har inte hittat en relevant sida på Wikipedia .
Så vad är syftet med PATH
och vad är skillnaden mellan /etc/paths
och ~/.bash_profile
**?
Till exempel i min paths
fil, jag ser den här:
/usr/bin /bin /usr/sbin /sbin /usr/local/bin
Men i min ~/.bash_profile
Jag ser detta:
# 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
Är det här bara ett användarspecifikt tillägg till filen paths
? ”är allt det där i paths
, som /usr/bin
?
Kommentarer
- Snälla ’ t kombinera flera frågor i ett enda inlägg. Var och en av dina frågor skulle vara välkomna här separat men inte alla tillsammans så här. Vänligen trimma ner det till en enda fråga, du kan kombinera 1 och 2 men de andra har inget att göra med PATH specifikt. 3 besvaras här 4 förklaras här och 5 är inte mycket vettigt jag ’ jag är rädd. Inte heller gör din bonusfråga, vilka filer är binära? Skript är inte.
- Jag har redigerat min fråga. Jag tyckte också att dessa länkar var till hjälp. Tack.
Svar
1. Vad är syftet med PATH?
PATH
är en miljövariabel som innehåller en kolonavgränsad lista över kataloger där ditt skal letar efter körbara filer som du namnge på kommandoraden utan att ange tydlig sökväg till dem (som i ditt jsdoc
exempel). Således, om din PATH
har
/usr/bin:/bin:/home/bin
så kommer alla körbara filer du ringer efter namn att letas efter i dessa kataloger (i den ordningen) och den första körbara filen som hittades är den som körs.
2. Vad är skillnaden mellan / etc / path och ~ / .bash_profile
Enligt denna fråga om ServerFault , /etc/paths
används för att ställa in PATH
globalt (dvs. hela systemet för alla användare) medan ~/.bash_profile
används för att ställa in inställningar per användare (där ~
kommer att vara användarens hemkatalog). Vad som står i .bash_profile
kan antingen lägga till det globala PATH
från /etc/paths
eller åsidosätta det helt.
For posten, /etc/paths
verkar vara en MAC OS-egenskap: Jag har inte stött på den åtminstone på GNU / Linux.
Kommentarer
Svar
Vad är syftet med PATH?
Det är hur din shell hittar program. När du till exempel skriver ls
kör det ett program som heter ls
som lever i /bin
på de flesta system, inklusive Mac OS X. Ditt skal kan bara hitta det eftersom /bin
finns i PATH
.
Skalet söker efter program i PATH
ordning, från vänster till höger. Om det finns två ls
-program på ditt system, och deras kataloger finns i din PATH
, kommer den att hitta den i katalogen som anges först i din PATH
.
Vad är skillnaden mellan / etc / path och ~ / .bash_profile
Sökvägar inställda i /etc/paths
läggs till PATH
vid start i alla skal på Mac OS X.
~/.bash_profile
är bara ett av flera skalskript som körs av Bash vid start, och flera av dessa är Bash-specifika. Om du ändrar skalet — Mac OS X skickas därför även tcsh
och zsh
, till exempel — ändringar som gjorts i /etc/bashrc
gäller inte ditt nya skal.
Dessutom är /etc/paths
en konfigurationsfil på systemnivå, medan ~/.bash_profile
är per användare. Om du hade flera interaktiva användare inställda på din Mac skulle du inte vilja lägga till kataloger till /etc/paths
som du inte ville visas i alla ”s PATH
. Detsamma gäller för /etc/bashrc
, förutom att det naturligtvis bara gäller användare som använder Bash som sitt skal.
Vad är skillnaden mellan PATH och $ PATH och $ {PATH}?
Du ser vanligtvis bara variabel utan sigil när du ställer in variabeln. FOO=bar
ställer in FOO
miljövariabel till strängen bar
. Om du skriver set
, visar skalet alla miljövariabler, och i så fall ser du också variabeln utan sigil.
$PATH
och ${PATH}
är vanligtvis utbytbara. De säger till skalet att expandera den aktuella PATH
-variabeln s värde på plats. Skillnaden har att göra med hur och var du använder dem. Till exempel:
$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx
I det andra echo
-kommandot skriver inget ut något eftersom det ber skalet att skriva ut en variabel som heter FOOx
, som inte existerar; skalet behandlar obefintliga variabler som tomma. Eftersom den tredje echo
använder den lockiga hakstångssyntaxen , gör det möjligt för skalet att se att du begär FOO
variabeln och att x
bara är ett annat tecken du vill skriva ut direkt efteråt .
Det finns ett annat sätt att få samma effekt utan lockiga hängslen, förresten:
$ echo "$FOO"x barx
Miljövariabler utvidgas i dubbla citat och citaten separerar x
från den variabla expansionen så att skalet gör rätt.
Jag använder m FOO
miljövariabel här bara för tydlighet. Allt jag har skrivit ovan gäller lika bra för , eftersom det bara är en annan miljövariabel. Exempeltexterna skulle bara vara mycket längre.
Vad betyder export PATH? När exporterar vi?
Om vi tar exemplet ovan FOO
, om du skulle köra ett annat program, är det skulle inte se variabeln FOO
eftersom den inte exporteras. Den lever bara inom den ena skalinstansen:
$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar
När jag först kör ett nytt bash
skal under det jag redan använde, försök sedan visa värdet av FOO
, jag få ett tomt eftersom FOO
inte exporterades för underprogram att se. Sedan lämnade jag den andra bash
instansen, exporterade den, körde bash
igen, och nu ser den andra instansen värdet av FOO
.
Du använder export
när du vill att underprogram ska se värden inställda i skalet och inte använder det när du inte vill att det ska hända.
Vanligtvis exporterar jag inte tillfälliga variabler i skalskript, eftersom jag inte vill att de ska ändra hur program körs från det skalskriptet.
Jag tänker inte svara på några av dina andra frågor. Du ska bara ställa en fråga i taget. Jag har bara svarat så många för att de är vagt relaterade. Allt annat hör hemma i en separat fråga.
/etc/paths
på OSX.