Co je PATH v systému Mac OS?

Co je PATH v systému Mac OS? Použil jsem ho k instalaci globálních nástrojů příkazového řádku, ale jedinou dokumentací, kterou jsem našel, jsou výukové programy , jak to udělat, bez skutečného vysvětlení, co se děje pod kapotou. Také jsem nenašel relevantní stránku na Wikipedii .

Takže jaký je účel PATH a jaký je rozdíl mezi /etc/paths a ~/.bash_profile **?

Například v mém paths souboru, vidím toto:

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

Ale v mém ~/.bash_profile, Vidím toto:

# 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 

Je to pouze uživatelsky specifický doplněk k souboru paths? Co „Všechny ty věci v paths, jako /usr/bin?

Komentáře

  • Nekombinujte prosím ‚ více otázek do jednoho příspěvku. Každá z vašich otázek by zde byla vítána samostatně, ale ne všechny společně. Upravte to prosím na jednu otázku, můžete zkombinovat 1 a 2, ale ostatní nemají s PATH konkrétně nic společného. 3 je zodpovězeno zde 4 je vysvětleno zde a 5 nedává moc smysl I ‚ mám strach. Ani vaše bonusová otázka, jaké soubory jsou binární? Skripty nejsou.
  • Upravil jsem svoji otázku dolů. Také jsem zjistil, že tyto odkazy jsou užitečné. Děkujeme.

Odpověď

1. Jaký je účel PATH?

PATH je proměnná prostředí , která obsahuje seznam adresářů oddělených dvojtečkou, kde váš shell bude hledat spustitelné soubory, které pojmenujete na příkazovém řádku, aniž byste poskytli explicitní cesta k nim (jako ve vašem jsdoc příkladu). Pokud tedy váš PATH

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

, bude v těchto adresářích vyhledán jakýkoli spustitelný soubor, který zavoláte podle jména. (v tomto pořadí) a první nalezený spustitelný soubor je spuštěný.

2. Jaký je rozdíl mezi / etc / paths a ~ / .bash_profile

Podle této otázky na ServerFault , /etc/paths slouží k globálnímu nastavení PATH (tj. Celého systému, pro všechny uživatele), zatímco ~/.bash_profile slouží k nastavení předvoleb pro jednotlivé uživatele (kde ~ bude domovský adresář uživatele). Co je napsáno v .bash_profile může buď přidat do globálního PATH z /etc/paths nebo jej úplně přepsat.

Pro záznam, /etc/paths se zdá být zvláštností MAC OS: přinejmenším jsem se s ním na GNU / Linux nenarazil.

Komentáře

  • Právě jsem je upravil, ale děkuji za zodpovězení všech!
  • @ggundersen Upravil jsem svou odpověď tak, aby odpovídala vaší upravené otázce.
  • @ggundersen můžete také přečíst moji odpověď a th Odkazy v něm uvedené o /etc/paths na OSX.

Odpověď

Jaký je účel PATH?

Takto funguje váš shell vyhledá programy. Když například napíšete ls, bude spuštěn program s názvem ls, který žije v /bin na většině systémů, včetně Mac OS X. Váš shell to zjistí jen proto, že /bin je v PATH.

Prostředí vyhledává programy v PATH pořadí, zleva doprava. Pokud jsou ve vašem systému dva ls programy a jejich adresáře jsou oba ve vašich PATH, najde ten v uvedeném adresáři. nejprve ve vašem PATH.

Jaký je rozdíl mezi / etc / paths a ~ / .bash_profile

Cesty nastavené v /etc/paths jsou přidány do PATH spuštění ve všech skořápkách v systému Mac OS X.

~/.bash_profile je jen jeden z několika skriptů prostředí, které Bash spouští při spuštění, a několik z nich je specifických pro Bash. Proto pokud změníte svůj shell — Mac OS X také dodává tcsh a zsh, například — změny provedené v /etc/bashrc se na váš nový shell nevztahují.

/etc/paths je také konfigurační soubor na úrovni systému, zatímco ~/.bash_profile je na uživatele. Pokud jste ve svém počítači Mac nastavili více interaktivních uživatelů, nechtěli byste přidat adresáře do /etc/paths, které jste nechtěli zobrazovat v každém PATH. Totéž platí pro /etc/bashrc, kromě toho, co se samozřejmě týká pouze uživatelů, kteří používají Bash jako svůj shell.

Jaký je rozdíl mezi PATH a $ PATH a $ {PATH}?

Obvykle vidíte pouze proměnná bez sigilu, když nastavujete proměnnou. FOO=bar nastaví proměnnou prostředí FOO na řetězec bar. Pokud zadáte set, shell vám zobrazí všechny proměnné prostředí a v takovém případě uvidíte také proměnnou bez jakéhokoli sigilu.

$PATH a ${PATH} jsou obvykle zaměnitelné. Říkají shellu, aby rozšířil aktuální PATH proměnnou “ s hodnota na místě. Rozdíl má co do činění s tím, jak a kde je používáte. Například:

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

Ve druhém příkazu echo shell nevytiskne nic, protože požádá shell o tisk proměnná s názvem FOOx, která neexistuje; prostředí považuje neexistující proměnné za prázdné. Protože třetí echo používá syntaxi složené závorky , umožňuje shellu zjistit, že požadujete proměnnou FOO a že x je jen další znak, který chcete ihned vytisknout .

Mimochodem existuje další způsob, jak dosáhnout stejného efektu bez složených závorek:

$ echo "$FOO"x barx 

Proměnné prostředí jsou rozbaleny v uvozovky a uvozovky oddělují x od variabilní expanze, takže prostředí dělá správnou věc.

Používám FOO proměnná prostředí zde pouze pro přehlednost. Všechno, co jsem napsal výše, platí stejně dobře pro , protože se jedná pouze o další proměnnou prostředí. Ukázkové texty by byly mnohem delší.

Co znamená export PATH? Kdy exportujeme?

Vezmeme-li z výše uvedeného FOO příkladu, pokud byste měli spustit jiný program, neviděl bych proměnnou FOO, protože se neexportuje. Žije pouze v rámci jedné instance prostředí:

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

Když poprvé spustím nový bash shell pod tím, který jsem již používal, zkuste ukázat hodnotu FOO, získejte mezeru, protože FOO nebyl exportován pro zobrazení podprogramů. Potom jsem opustil druhou bash instanci, exportoval ji, znovu spustil bash a nyní druhá instance vidí hodnotu FOO.

export používáte, když chcete, aby podprogramy viděly hodnoty nastavené v shellu, a nepoužívejte je když si nepřejete, aby se to stalo.

Obvykle neexportuji dočasné proměnné do skriptů prostředí, protože nechci, aby měnily chování programů z tohoto prostředí.

Nebudu odpovídat na žádné vaše další otázky. Měli jste klást pouze jednu otázku najednou. „Odpověděl jsem jen na tolik, protože jsou vágně příbuzní. Všechno ostatní patří do samostatné otázky.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *