Vad är PATH på ett Mac OS?

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

  • Jag redigerade dem bara, men tack för att du svarade på dem alla!
  • @ggundersen Jag har trimmat mitt svar så att det passar din redigerade fråga.
  • @ggundersen kanske du vill läsa mitt svar och th e länkar däri om /etc/paths på OSX.

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *