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
má
/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
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.
/etc/paths
na OSX.